仅通过使用 require 把手,我就会收到以下错误。
▶ 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/module_name/dist。
这就是节点应用程序假定它们所在的位置; 这意味着 Webpack 正在处理 require(); 与节点不同。
我用 ..
resolve: {
alias: {
handlebars: 'handlebars/dist/handlebars.min.js'
}
}
在我的 webpack 配置中
谢谢@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 项目中使用把手时,我也会收到此错误。 我无法更改我的 webpack 配置,因为 Angular CLI 团队决定对 Angular CLI 用户隐藏 webpack 详细信息,并且他们不正式支持修改 webpack 配置。
@oocx您可以像这样从 node_modules 文件夹中导入 JS 文件
import 'handlebars/dist/handlebars.min.js';
这很好用!
为了让它在 angular 4 项目中工作,我必须这样做:
从 'handlebars/dist/handlebars' 导入 * 作为把手;
通常我会这样做:
从“把手”导入 * 作为把手;
上面的行在 node 中的打字稿项目中工作正常,但在 angular 4 中无效。
HandleBars 是我必须像这样导入的唯一项目。 这让我担心我会在路上遇到问题。 看起来 HandleBars 与 angular 的 webpack 不兼容。
我可以看看是否有人设置了一个重现该问题的最小示例项目。 虽然没有关于“何时”的承诺......
@swilliams-a3digital 获取Could not find a declaration file for 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
更新:
//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如果您对此问题有很好的解决方案,欢迎您提交拉取请求。 只要它不破坏任何东西,我就会合并并发布一个新版本。 NodeJS 中的const Handlebars = require('handlebars')
和旧版 webpack 的现有设置应该仍然有效。
关于“然而他们忽视和忽视”:
车把的问题是合作者不多,目前,据我所知,我是唯一活跃的人。 好吧,或多或少是活跃的。 现在 23 点 26 分,这是我通常来处理我的私人项目的时间,因为我有一个家庭,有白天的工作和其他爱好。
所以当你写“然而他们忽视和忽视”时,没有很多“他们”。 几乎可以肯定没有“他们”会因为在这个项目上工作而获得报酬。 我帮助人们,因为与人交谈很有趣,因为解决问题、修复错误和编写测试很有趣。 因为我自己在几个项目中使用了 Handlebars,而且因为时不时站在舞台灯光下感觉很好。 但我不认为这样做是我的责任。 所以我选择我喜欢的问题,主要是那些快速而清晰的问题。
因此,如果您正在使用 Handlebars 并且遇到问题并且没有人会解决它,也许您应该尝试自己提供解决方案。
不过我会重新打开这个问题,因为它似乎没有解决。
因为不时站在舞台灯光下感觉很好。
我也在做开源是为了好玩,虽然不像这个库那么受欢迎。
还有我简历中的一两行。 有助于获得更好的工作。
我可以看到你并没有从中获得多少利润,而不仅仅是有趣,因为它在技术上不是你的项目,比如@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
所做的那样。
他们只在执行import 'babel/register'
时安装require()
钩子。
对于另一个主要版本来说,这将是一个重大变化,但我可以看到很可能没有这样的版本。
也可以在根目录中创建一个名为core.js
( module.exports = require('handlebars/dist/cjs/handlebars')
) 的文件,然后 Webpack 用户将需要handlebars/core
而不是handlebars/dist/cjs/handlebars
(以及一行在自述文件中)。
Webpack 的创建者也来自德国。
无论如何, import Handlebars from 'handlebars/dist/cjs/handlebars'
有效,我认为您不需要更改库中的任何内容,只需在自述文件中添加一行文档,Webpack 使用import Handlebars from 'handlebars/dist/cjs/handlebars'
而不是常规导入。
顺便说一下,我不是专门指你,因为你之前在这个问题上没有留下负面评论。
我指的是@methodbox和他的评论:
听起来像是 Webpack 的问题,而不是 Handlebars。
还有@rafde和他的评论:
您的设置似乎有问题,因为其他人都没有这个问题
你的评论并没有声称 Webpack 是“错误的”或任何东西,所以你这边没有错误的话:
我可以看看是否有人设置了一个重现该问题的最小示例项目。 虽然没有关于“何时”的承诺......
您没有说“Webpack 做错了,关闭问题”,所以您的评论没问题。
@nknapp
无论如何, import Handlebars from 'handlebars/dist/cjs/handlebars'
工作得很好,我认为您不需要更改库中的任何内容。
只需在自述文件中添加一行,说“如果您使用 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 中解决
最有用的评论
我用 ..
在我的 webpack 配置中