【问题标题】:Webpack causes syntax error in bundle outputWebpack 在包输出中导致语法错误
【发布时间】:2015-01-22 13:28:43
【问题描述】:

我一直在努力解决一个我认为是由Webpack 引起的问题。

基本上,我有一个基于 Node 的应用程序,我将它与 Webpack 捆绑在一起以提供给客户端(它是一个基于 ReactJS 的应用程序)。当我安装Tabletop NPM 包和required 时出现问题。

尝试在浏览器中加载 Webpack 创建的 bundle.js 时,出现语法错误:

Uncaught SyntaxError: Unexpected identifier

bundle.js 中抱怨这条线:

target[capName] = __webpack_require__(387)(""path + '/' + name);

经过一番挖掘,我发现这行来自Hoek库中的一行(这是Tabletop的子依赖):

target[capName] = require(path + '/' + name);

显然,Webpack 在这里做了一些时髦的事情。

但我无法找出原因。桌面包括 an example 的 NodeJS 用法,我能够 Webpack 并运行得很好。

我还克隆了 Hoek 和 Webpacke,没有看到任何像上面这样的非法转换。

所以现在,我不确定这是 Webpack、Hoek 还是 Tabletop 问题,这就是我在这里发布它的原因。

我在此处或 GH 上没有发现相关问题。

感谢所有帮助!

【问题讨论】:

  • 这是一个动态需求问题。默认情况下,短篇故事 webpack 不支持动态需求(例如:require(not + 'a' + fixed + path);)但是可以使用插件来教它如何处理它们。请参阅:github.com/webpack/webpack/issues/118github.com/webpack/webpack/…
  • 由于代码是webpack生成的,很明显是bug,应该在Github上报告。还请发布您的配置,因为我认为它是由特定选项引起的。
  • 感谢您的信息。我同意这是一个错误@jhnns,但正如@generalhenry 提供的链接所示,我显然不是第一个遇到这种情况的人。我已经意识到 Tabletop 有一个过时的 request 依赖项 - 我正在分叉 Tabletop 来升级它,看看它是如何工作的。完成后会发布。

标签: javascript node.js npm webpack


【解决方案1】:

我在添加时使用superagent取得了一些成功

plugins.push(new webpack.DefinePlugin({ "global.GENTLY": false }));node: {__dirname: true}

到 webpack 的配置修复 superagent 与 webpack 一起使用。

使用request 库时,将以下内容添加到 webpack 的配置中:

node: {
  "net": "empty"
}

修复Uncaught Error: Cannot find module "net"

但是,我现在遇到了依赖于 request 的 mime 库的问题:Error: ENOENT, no such file or directory '/types/mime.types'

Aksel,你用 webpack 修复 request 成功了吗?

【讨论】:

  • 我在/types/ 中接触过mime.typesnode.types,但这似乎不是正确的方法。
  • 感谢您的信息。不,我还没试过。我最终在我的 Gulpfile 中而不是在我的客户端应用程序中使用了 Tabletop,这避免了与 webpack 相关的问题。
  • 在一个模糊相关的问题上来到这里,plugins.push(new webpack.DefinePlugin({ "global.GENTLY": false })); 修复了它。太棒了!
【解决方案2】:

原来hoek 包的一个过时的嵌套依赖项导致了这种情况,这是由于上面显示的动态要求行。这已在 hoek@2.0.0 中删除。

不幸的是,Tabletop 的 request dep 有一个过时的依赖关系 hawk,它又依赖于 hoek。我 fork request 并修改了版本,但现在我在浏览器中加载时遇到了不同的错误:

Uncaught Error: Cannot find module "net"

net 是一个核心 Node 模块,所以我怀疑这里发生了一些事情,因为我们正在 Webpacking 服务器端 JS 以在浏览器中运行它。不过,这是一个不同的问题,所以我认为这里的原始问题得到了回答..

但我仍然无法使用桌面。我可能必须对其进行 Browserify 并直接使用该捆绑包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多