我的 webpack2 配置中有一个下划线模板加载器,它是用 babel 转译的。它在编译时失败,因为with
在代码编译代码中使用。这是我的装载机中的相关部分webpack.config.js
:
我在加载器下有这个部分:
{
test: /\.html$/,
use: [
{
loader: 'babel-loader',
query: {
presets: [
['es2015', { modules: false }],
'es2016',
'es2017',
'stage-3',
],
},
},
{
loader: 'ejs-loader',
},
],
};
这就是我想要的,我得到:
ERROR in ./src/table/row.html
Module build failed: SyntaxError: 'with' in strict mode (5:0)
3 | var __t, __p = '', __e = _.escape, __j = Array.prototype.join;
4 | function print() { __p += __j.call(arguments, '') }
> 5 | with (obj) {
| ^
6 |
7 | _.each(tableKeys, (k) => { ;
8 | __p += '\n <td>' +
如果我完全删除该babel
部分,它可以工作,但没有转译 ES6 代码:
{
test: /\.html$/,
use: [
{
loader: 'ejs-loader',
},
],
};
我也看到了这个关于删除严格模式的问题,并尝试了一些与 es2015 应用严格相关的事情。我想我已经尝试了该问题中的所有解决方案,包括热补丁解决方法,但我仍然遇到同样的错误。最后我尝试了这个:
{
test: /\.html$/,
use: [
{
loader: 'babel-loader',
query: {
presets: [
],
},
},
{
loader: 'ejs-loader',
},
],
};
我虽然这应该与没有 bable pass 的情况相同,但我在这里得到了同样的错误。不知何故,没有任何预设我得到了同样的错误。
编辑
我也尝试通过传入来解决它variable
,query
并且我已经使用ejs-loader
.
我制作了一个说明问题的存储库。主分支已将 babel-loader 注释掉并且可以使用,with
而transpile
即使{ modules: false }
通过了分支也会有编译错误,并且我有一个名为的分支transpile-no-presets
,其中 package.json 中的所有预设都被删除并且错误仍然显示。