首页 > 解决方案 > 使用导出而不是 module.exports 的汇总包

问题描述

我有一个使用汇总捆绑的库,这是rollup.config.js文件中的一部分:

export default {
  input: `src/${libraryName}.ts`,
  output: [
    { file: pkg.main, name: camelCase(libraryName), format: 'cjs', sourcemap: true },
    { file: pkg.module, format: 'es', sourcemap: true },
  ],

  ....
}

它生成两个文件dist/libname.umd.jsdist/libname.es5.js. 我已经确认console.log在两个文件中都使用了一个声明来require('libname')加载dist/libname.umd.js. 但是,以下行:

var x = require('libname').X
console.log(x) // This is undefined

打印undefined。所以,我尝试dist/libname.umd.js手动编辑文件,并在我看到的文件底部:

exports.X = X;

整体变量X捆绑在文件上方的某个位置。我将其修改为:

module.exports.X = X;

然后它似乎起作用了。我对 node/js 有点陌生,所以我不确定这是否是导出模块的方式,但是在阅读博客文章时(http://www.hacksparrow.com/node-js-exports-vs -module-exports.html ) 事实证明它们都应该没问题?我仍然有点不清楚这一点。

另外,当我简单地这样做时:

console.log(require('libname')

它打印[Function: uniqSetWithForEach]console.log(require('libname')())打印[]

编辑所以暂时,只是为了让我可以继续我的工作,我已经修改rollup.config.ts了添加outro

export default {
  ...
  output: [
      { file: pkg.main, name: camelCase(libraryName), format: 'cjs',
        sourcemap: true,
        outro: 'module.exports = Object.assign({}, module.exports, exports)'
      }
  ]
  ...
}

现在这似乎可以做到,但我很确定这不是一个干净的解决方案。

标签: node.jsrollupjs

解决方案


推荐阅读