使用导出而不是module.exports的汇总捆绑包

时间:2018-09-19 15:38:21

标签: node.js rollupjs

我有一个我正在使用汇总工具捆绑的图书馆,这是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)'
      }
  ]
  ...
}

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

0 个答案:

没有答案