Handlebars.js: webpack + требует ошибки руля

Созданный на 26 янв. 2016  ·  21Комментарии  ·  Источник: handlebars-lang/handlebars.js

Я получаю следующую ошибку, просто используя требуемый руль.

▶ webpack --display-modules   
Hash: bdb0fe35e2f8bde783e5
Version: webpack 1.12.12
Time: 116ms
         Asset     Size  Chunks             Chunk Names
bundle.main.js  2.82 kB       0  [emitted]  main
   [0] ./src/index.js 150 bytes {0} [built]
   [1] ./~/handlebars/lib/index.js 792 bytes {0} [built] [3 warnings] [3 errors]

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars/compiler/printer in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 9:14-64

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve module 'fs' in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 17:11-24

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 7:17-50 

Мой index.js

var handlebars = require('handlebars');

Мои package.json

  "dependencies": {
    "handlebars": "^4.0.5"
  }

Самый полезный комментарий

Я обошел это с ..

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

в моей конфигурации веб-пакета

Все 21 Комментарий

Как упоминалось в # 1102, добавление строки
"browser": "dist/handlebars.js",
to handlebars 'package.json решил это за меня.

Похоже на проблему с Webpack, а не с Handlebars.
Обычный путь по умолчанию для любых файлов ядра модуля узлов - / node_modules / имя_модуля / dist.

Вот где приложение узла предполагает, что они расположены; это означает, что Webpack обрабатывает require (); иначе, чем узел.

Я обошел это с ..

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

в моей конфигурации веб-пакета

спасибо @gilesbradshaw : +1:: smile:

@abhisekp было ли это решено? Пожалуйста, закройте, если да.

@rafde Я не проверял это, но закрываю эту проблему, так как проблема ясна и предлагается четкое решение.

Спасибо за напоминание. :краснеть:

проблема все еще воспроизводится, если мне нужны рули где-нибудь в .js:

var Handlebars = require('handlebars');
Handlebars.registerHelper('greet', function(name) {
            return 'Hello, name=' + name + '!';
});

но если я удалю эту строку

var Handlebars = require('handlebars');

проблема ушла

@gilesbradshaw
Большое спасибо!

Я также получаю эту ошибку при использовании руля с проектом Angular 2 CLI. Я не могу изменить конфигурацию своего веб-пакета, потому что команда Angular CLI решила скрыть детали веб-пакета от пользователей Angular CLI, и они официально не поддерживают изменение конфигурации веб-пакета.

@oocx Вы можете просто импортировать файл JS из папки node_modules вот так

import 'handlebars/dist/handlebars.min.js';

Это прекрасно работает!

Чтобы заставить это работать в проекте angular 4, мне пришлось сделать следующее:
import * как handleBars из 'handlebars / dist / handlebars';

обычно я просто делал это:
import * as handleBars from 'handlebars';

Приведенная выше строка отлично работает в проекте машинописного текста в узле, но не в angular 4.

HandleBars - единственный проект, который мне нужно импортировать таким образом. Это заставляет меня беспокоиться, что у меня в будущем возникнет проблема. Похоже, что HandleBars не очень хорошо работает с веб-пакетом angular.

Я мог бы посмотреть, создаст ли кто-нибудь минимальный пример проекта, воспроизводящего проблему. Но никаких обещаний насчет «когда» ...

@ swilliams-a3digital Получение Could not find a declaration file for module declare module 'handlebars' или добавление @ types / handlebars не помогает. Как ты это решил?

Для других, ищущих здесь

Это лучшее решение, которое я нашел
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
здесь https://github.com/pcardune/handlebars-loader/issues/110#issuecomment -358681867

Спасибо @mAAdhaTTah

UPD:

//fix handlebars warnings
config.resolve.alias = {
    ...config.resolve.alias,
    'handlebars/runtime': 'handlebars/dist/cjs/handlebars.runtime',
    'handlebars': 'handlebars/dist/cjs/handlebars.runtime',
};

Это отсталый.
Эта handlebars библиотека должна была исправить эту ошибку.
И все же они пренебрегают и игнорируют.

Обходной путь - заменить:

import Handlebars from 'handlebars'

с участием:

import Handlebars from 'handlebars/dist/cjs/handlebars'

@catamphetamine, если у вас есть хорошее решение этой проблемы, вы можете const Handlebars = require('handlebars') в NodeJS и существующие настройки с более старыми версиями webpack, по-прежнему должны работать.

О «Все же они пренебрегают и игнорируют»:

Проблема с рулем в том, что соавторов не так много, и на данный момент, насколько я понимаю, я единственный активный участник. Ну более-менее активно. Сейчас 23:26, и это время, когда я обычно прихожу работать над своими частными проектами, потому что у меня есть семья, дневная работа и другие хобби.

Поэтому, когда вы пишете «Все же они пренебрегают и игнорируют», «они» не так много. Почти наверняка нет «они», которым платят за работу над этим проектом. Я помогаю людям, потому что с ними весело разговаривать и потому, что весело решать проблемы, исправлять ошибки и писать тесты. Потому что я сам использую Handlebars в паре проектов и потому, что время от времени приятно стоять в свете сцены. Но я не считаю своим долгом это делать. Так что я выбираю те вопросы, которые мне нравятся, в основном те, которые быстрые и ясные.

Итак, если вы используете Handlebars и у вас есть проблема, и никто не собирается ее решать, возможно, вам стоит попробовать внести свой вклад в решение самостоятельно.

Я снова открою проблему, потому что она, похоже, не решена.

потому что время от времени приятно стоять в свете сцены.

Я тоже делаю open source для развлечения, хотя и не так популярно, как эта библиотека.
А также на пару строк в моем резюме. Помогает получить лучшую работу.
Я вижу, что вы не получаете от этого большой прибыли, а не просто развлекаетесь, потому что технически это не ваш проект, например @ nknapp / handlebars.js
Вы поддерживаете его, и @wycats получает все кредиты и звезды github в отношении строки URL.
Хорошо, по крайней мере, теперь мы знаем, что этот проект больше не поддерживается так активно.
Тем не менее, я думаю, он используется во многих местах (включая устаревшие).
Например, SendGrid недавно запустил «настраиваемые шаблоны» с использованием этого языка handlebars .
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

Что касается возможного решения, это будет разделение пакета на handlebars и handlebars/register как это сделал Babel со своими babel и babel/register .
Они устанавливают ловушку require() при выполнении import 'babel/register' .
Это было бы критическим изменением для другой основной версии, но я вижу, что, скорее всего, такой версии не будет.
Также можно создать файл в корневом каталоге с именем что-то вроде core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ), и тогда пользователям Webpack потребуется handlebars/core вместо handlebars/dist/cjs/handlebars (вместе со строкой в README).
Создатель Webpack тоже из Германии.

В любом случае, import Handlebars from 'handlebars/dist/cjs/handlebars' работает, и я думаю, вам не нужно ничего менять в библиотеке, просто, возможно, добавьте строку документации в README, которая для Webpack использует import Handlebars from 'handlebars/dist/cjs/handlebars' вместо обычного импорта.

Кстати, я не имел в виду конкретно вас, потому что вы раньше не оставляли отрицательного комментария в этом выпуске.
Я имел в виду @methodbox и его комментарий:

Похоже на проблему с Webpack, а не с Handlebars.

И @rafde и его комментарий:

Похоже, проблема с вашей настройкой, так как ни у кого больше этой проблемы нет

Ваш комментарий не утверждал, что Webpack "неправильный" или что-то в этом роде, поэтому с вашей стороны не должно быть неправильных слов:

Я мог бы посмотреть, создаст ли кто-нибудь минимальный пример проекта, воспроизводящего проблему. Но никаких обещаний насчет «когда» ...

Вы не сказали, что «Webpack делает это неправильно, закройте проблему», поэтому ваши комментарии в порядке.

@nknapp
В любом случае import Handlebars from 'handlebars/dist/cjs/handlebars' работает нормально, и я думаю, вам не нужно ничего менять в библиотеке.
Просто добавьте в README строчку: «Если вы используете Webpack, тогда import Handlebars from 'handlebars/dist/cjs/handlebars' вместо import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' в порядке и работает.

import Handlebars from 'handlebars/dist/cjs/handlebars

Работал для меня с этого комментария.

Я согласен с @catamphetamine .

Лучшая документация дорогого стоит, и добавление этой строчки на страницу установки никого не убьет.

Мы все создаем великие вещи и хотим, чтобы люди использовали их.

Но угадайте, что, если документация - отстой ... так же и проект, потому что никто, кроме вас, не сможет это понять.

И помните ... люди боятся того, чего не понимают.

-окончить-

Однако я ценю ваши усилия по библиотеке.
Быть разработчиком с открытым исходным кодом - это зачастую неблагодарная и болезненная одиссея, за которую не вознаграждается совсем немного.

На самом деле я не пытаюсь заставить людей использовать Handlebars. Я просто пытаюсь помочь людям, которые уже решили его использовать.

В настоящее время я создаю новый сайт документации (всякий раз, когда у меня останется время), и я включу его туда.

Должен быть решен в # 1102

Была ли эта страница полезной?
0 / 5 - 0 рейтинги