Handlebars.js: webpack + 需要把手错误

创建于 2016-01-26  ·  21评论  ·  资料来源: handlebars-lang/handlebars.js

仅通过使用 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"
  }

最有用的评论

我用 ..

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

在我的 webpack 配置中

所有21条评论

如#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

至于可能的解决方案,它会将包拆分为handlebarshandlebars/register就像 Babel 对babelbabel/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 中解决

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

kpdecker picture kpdecker  ·  18评论

aputinski picture aputinski  ·  11评论

amrnt picture amrnt  ·  13评论

carlyle picture carlyle  ·  18评论

rottmann picture rottmann  ·  11评论