所以我一直试图让 Sweet.js 在我的 ES6 项目上工作,使用 Webpack 来编译它。我已经能够让每个人单独工作,但无论我如何尝试将它们放在一起,它都会产生某种错误......我认为这主要与源地图有关,因为错误通常看起来像像这样:
Module build failed: Error: C:/Users/.../index.js: Invalid mapping: {"generated":{"line":4,"column":12,
"lastColumn":null},"source":null,"original":{"line":null,"column":null},"name":null}
这是失败的代码:
webpack.config.js:
module.exports = {
entry: './public_html/script/src/index.js',
// ...
module: {
loaders: [
{ test: /\.js$/, exclude: /node_modules.*\.js/, loader: 'babel!sweetjs?modules[]=./macros.sjs&sourceMap=true' },
// ...
]
},
// ...
devtool: 'source-map',
// ...
};
宏.sjs:
macro (=~) {
rule infix { $x | $y } => {
!!$y.test($x)
}
};
export (=~);
macro (!=~) {
rule infix { $x | $y } => {
!$y.test($x)
}
};
export (!=~);
index.js:
let x = "asdf", p = /a/i;
x =~ p;
反转加载器不起作用,因为 Babel 不知道如何处理宏。移除 Babel 加载器后它可以编译,但随后(发生了更复杂的事情)Webpack 失败了,因为它不知道如何处理 ES6 的东西。
到目前为止,我还没有发现任何关于同时使用 babel 和 sweetjs 加载器的信息......甚至可能吗?
编辑:所以我发现它是 sweetjs-loader 的一个错误:https ://github.com/jlongster/sweetjs-loader/issues/4
将 true 设置为 false 可以解决问题,并创建另一个问题。Sweet.js 似乎将一些垃圾数据放入文件底部,这与 Babel 和 Webpack 的模块加载相混淆。每次构建都会多次出现此错误:
ERROR in ./public_html/script/src/main-menu/index.js
Module build failed: Error: Line 56: Unexpected token ILLEGAL
[... } ) ; ...]