3

我有 2 个打字稿项目,其中包含很少的课程。我在 package.json 的 Project2 中添加了 Project1 的依赖项

{
  "name": "Project2",
  "dependencies": {
    "@Project1": "file:../Project1/dist"
  }
}

这两个项目都是使用

“目标”:“es5”,“模块”:“es2015”,

我正在使用Karma-Webpack为项目设置测试环境。为了转译我使用babel-loader(预设:es2015)而不是 ts-loader 的代码。它转译来自 Project2 的代码,但来自位于 node_modules 中的 Project1 的代码没有被转译。由于它在运行测试时抛出以下错误

Chrome 55.0.2883 (Windows 10 0.0.0) ERROR Uncaught SyntaxError: Unexpected token export at spec.bundle.js:80972

我想知道是否可以使用 webpack 从 node_modules 转换本地模块?

注意:如果我将模块类型更改为“commonjs”,它可以工作,但这不是我正在寻找的解决方案。

有什么建议么???

4

1 回答 1

2

好吧,因为我使用 es2015 编译父模块,所以我遇到了这个错误。如果您使用 commonjs,您将不会遇到此问题。

您可以通过在 karma.config.file 的 webpack 配置中添加以下内容来转换节点模块代码。

webpack: {
            resolve: {
                extensions: ['', '.ts', '.js']
            },

            module: {
                loaders: [
                    {
                        // This will transpile Typescript files
                        test: /\.ts(x?)$/,
                        exclude: /node_modules/,
                        loader: "babel-loader" + "?presets[]=es2015" + "!ts-loader",
                    },
                    {
                        // This will transpile ES2015 javascript files
                        test: /\.js(x?)$/,
                        include: [
                            path.resolve(__dirname, "node_modules/<<YOUR MODULE NAME>>")
                        ],
                        loader: "babel-loader" + "?presets[]=es2015"
                    }
                ]
            }
        },

现在,Webpack 将使用 babel-loader 转换 JS/TS 代码。

于 2017-02-01T10:25:59.907 回答