Я получаю следующую ошибку, просто используя требуемый руль.
▶ 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"
}
Как упоминалось в # 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
Самый полезный комментарий
Я обошел это с ..
в моей конфигурации веб-пакета