7

所以我一直试图让 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/jlong​​ster/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
[... } ) ;  ...]
4

0 回答 0