是否可以从node_module转换本地模块?

时间:2017-01-24 20:08:10

标签: typescript webpack ecmascript-6 babeljs karma-webpack

我有2个打字稿项目,其中包含很少的类。我在package.json

中的Project2中添加了Project1的依赖项
{
  "name": "Project2",
  "dependencies": {
    "@Project1": "file:../Project1/dist"
  }
}

该项目均使用

构建
  

“target”:“es5”,“module”:“es2015”,

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

  

Chrome 55.0.2883(Windows 10 0.0.0)错误未捕获的SyntaxError:   spec.bundle.js上的意外令牌导出:80972

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

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

任何建议???

1 个答案:

答案 0 :(得分: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代码。