使用webpack,节点的babel-preset-env将es6模块转换为es5

时间:2017-09-23 16:44:29

标签: webpack es6-modules

当我使用带有此配置的节点配置的babel-preset-env的webpack时:

{
    target: 'node',
    context: __dirname,
    entry: {
      server: ['./src/server.js'],
    },
    output: {
      filename: '[name].bundle.js',
      chunkFilename: '[name].bundle.js',
      path: path.join(__dirname, '/dist'),
    },
    module: {
      rules: [{
        test: /\.js$/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              ['env', {
                targets: {
                  node: "current",
                },
              }],
              'react'
            ],
          },
        },
      }],
    },
}

我的服务器使用一些可以通过webpack检测到的模块,如:

[319] ./node_modules/react-router-dom/es/withRouter.js 395 bytes {0} [built]

我的问题是 es modules 被转换为捆绑包中的 es5 one ,我做错了什么?

Webpack 3.6 babel-preset-node 1.6

2 个答案:

答案 0 :(得分:0)

您应该在配置中添加libraryTarget

output: {
  filename: ...,
  pathL ...,
  libraryTarget: 'commonjs2'
},

现在节点不支持es模块(仅当你使用flag运行时才支持)所以我认为webpack的输出很好。

答案 1 :(得分:0)

对不起,es模块不是用es6编写的,而是es5,需要用import替换。所以为了使用来自node_modules的es6代码/看起来我们必须使用他们的src /文件夹。