与Webpack捆绑时,Underscore会出错

时间:2016-09-02 22:21:50

标签: javascript ecmascript-6 webpack underscore.js

我正在尝试重写使用require.js的旧应用程序来使用es6导入。其中一个使用的库是Backbone和Underscore。要创建一个大包并将es6预编译到es5,我使用带有babel-loader的Webpack。 Bundle被创建但是当我在浏览器中加载它时,我收到以下错误:

class SearchChannel < ApplicationCable::Channel
  def subscribed
    search = Search.find(params[:id])
    stream_for search
  end

  def unsubscribed
  end
end

看起来Underscore中的'this'在创建的bundle.js中是未定义的,所以root._给了我错误。

Uncaught TypeError: Cannot read property '_' of undefined

有人遇到过同样的问题吗?

2 个答案:

答案 0 :(得分:23)

babel-loader使用es2015预设处理的文件由Babel作为ES6模块处理。在ES6模块中,函数外的thisundefined。在您的情况下,您需要添加

exclude: /node_modules/,

到您的babel-loader配置,以便它只处理您自己的代码。目前,您可能也在所有节点模块上运行Babel,其中许多模块不希望通过Babel运行,也不打算成为ES6模块。

答案 1 :(得分:0)

也许,按照以下配置可以为您提供另一种选择:

{
    "presets": [
        ["es2015", {
            "modules": false
        }]
    ]
}

问题中详细描述了原因:https://github.com/babel/babel/issues/4720