我正在尝试重写使用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
有人遇到过同样的问题吗?
答案 0 :(得分:23)
babel-loader
使用es2015
预设处理的文件由Babel作为ES6模块处理。在ES6模块中,函数外的this
为undefined
。在您的情况下,您需要添加
exclude: /node_modules/,
到您的babel-loader
配置,以便它只处理您自己的代码。目前,您可能也在所有节点模块上运行Babel,其中许多模块不希望通过Babel运行,也不打算成为ES6模块。
答案 1 :(得分:0)
也许,按照以下配置可以为您提供另一种选择:
{
"presets": [
["es2015", {
"modules": false
}]
]
}
问题中详细描述了原因:https://github.com/babel/babel/issues/4720