首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的webpack巴贝尔设置发射ESM需要,而我已经配置了我的预置为公共?

为什么我的webpack巴贝尔设置发射ESM需要,而我已经配置了我的预置为公共?
EN

Stack Overflow用户
提问于 2020-06-20 00:05:06
回答 1查看 1.4K关注 0票数 4

今天我观察到babel/babel装载机表现出一些不良的行为。我把一些资产捆绑在nodejs上使用。编译后,将使用对@babel/runtime/**/esm/**的引用生成一个包。当然,节点不能导入这样的文件,在node bundle.js上我得到:

代码语言:javascript
复制
Must use import to load ES Module: /my/project/node_modules/@babel/runtime/helpers/esm/defineProperty.js
require() of ES modules is not supported.

正确的。合乎道理。但巴贝尔-装载机注入了这些进口产品。事实上,@babel/运行时中的父文件夹包含所有非ESM的东西,实际上我可能想要导入这些东西!我的babel配置看起来是这样的:

代码语言:javascript
复制
{
  presets: [
    [
      "@babel/preset-env",
      {
        modules: 'commonjs',
        targets: {
          node: "current",
          esmodules: false,
        },
      },
    ],
    "@babel/preset-typescript",
  ]
}

如您所见,我正试图通过targets.esmodules: falsemodules: 'commonjs'告诉babel使用commonjs。我希望这些条目会告诉babel不要期望ESM兼容!不过,生成的包仍然如下所示:

代码语言:javascript
复制
...
var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "@babel/runtime/helpers/esm/toConsumableArray"));

我完整的webpack配置也相当简洁:

代码语言:javascript
复制
{
    entry: serverFilename,
    mode: 'development',
    output: {
      path: path.dirname(serverBuildFilename),
      filename: path.basename(serverBuildFilename)
    },
    target: "node",
    externals: [webpackNodeExternals()],
    optimization: {
      moduleIds: 'named',
      minimize: false
    },
    resolve: {
      extensions: ['.ts', '.tsx', '.wasm', '.mjs', '.js', '.json'],
    },
    module: {
      rules: [
        {
          test: /\.tsx?$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: babelConfig.presets // see babel config above
            }
          }
        },
      ],
    },
  }

我无法判断我是否缺少配置,是否babel不尊重我的配置,或者<your ideas here>

所有小费都很感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-07-15 23:44:30

我花了一段时间才找到解决方案,这篇文章帮助了https://github.com/webpack/webpack/issues/11696

在这里复制了我的解决方案:

最后我在webpack配置中使用了webpack-node-externals来绕过这个问题。

代码语言:javascript
复制
const nodeExternals = require('webpack-node-externals');

// add these to the webpack config.
    externals: [
          nodeExternals({
            whitelist: [/^@babel\/runtime/],
          }),
     ],

此解决方案创建重复的babel/运行时文件注入,还可以通过https://webpack.js.org/loaders/babel-loader/#babel-is-injecting-helpers-into-each-file-and-bloating-my-code减轻

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62480132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档