【问题标题】:With webpack, babel-preset-env for node transpiles es6 modules to es5使用 webpack,babel-preset-env for node 将 es6 模块转换为 es5
【发布时间】:2017-09-23 16:44:29
【问题描述】:

当我使用 webpack 和 babel-preset-env 为节点配置此配置时:

{
    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 可以很好地检测到的 es 模块,例如:

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

我的问题是 es 模块 被转译成 es5 one 在捆绑包中,我做错了什么?

Webpack 3.6 babel-preset-node 1.6

【问题讨论】:

    标签: webpack es6-modules


    【解决方案1】:

    您应该将libraryTarget 添加到您的配置中:

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

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

    【讨论】:

    • 我希望 babel 从这些依赖项中保留 const、箭头函数等,而不是在 cjs 中转译所有东西
    • 因为你用node: "current",你现在用什么版本的node?​​span>
    • Node 7.8 但我在上次浏览器配置中遇到了同样的问题。
    【解决方案2】:

    抱歉,es 模块不是用 es6 编写的,而是用 es5 编写的,其中 require 被 import 替换。因此,为了使用来自 node_modules/ 的 es6 代码,我们必须使用他们的 src/ 文件夹。

    【讨论】:

    • 你可以使用 Webpack、babel-preset-env 发布你的配置,用 ES6 做出反应吗?
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2017-08-07
    • 2020-05-29
    • 1970-01-01
    • 2021-12-18
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多