将节点程序包编译为ESM

时间:2019-12-04 09:21:52

标签: javascript node.js webpack babel

我正在使用Webpack 4和babel 7进行编译的节点程序包。

在包装上执行以下导出操作时

export default { foo: "bar" }

并且我正在尝试使用以下方式导入它:

import obj from "package"

obj获取默认名称空间,这意味着obj如下:

{ default: { foo: "bar" } }

我已经阅读了webpack的following article,它说,非ESM模块现在将获得default命名空间。

我的问题是,如何以生成ESM模块的方式编译我的包,以便可以正常导入默认属性?

.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "corejs": 3
      }
    ]
  ]
}

webpack.config.js

module.exports = {
  entry: [__dirname + "/src/index.js"],

  output: {
    path: __dirname + "/dist",
    filename: "index.js",
    libraryTarget: "commonjs2"
  },

  target: "node",

  mode: "production",

  module: {
    rules: [
      {
        test: /\.js$/,
        use: "babel-loader",
        exclude: /node_modules/
      }
    ]
  },

  externals: externals.reduce(
    (acc, name) => Object.assign({}, acc, { [name]: true }),
    {}
  ),

  plugins: [
    new GenerateJsonPlugin("package.json", genPackage())
  ]
}

0 个答案:

没有答案