我有一个我正在使用汇总工具捆绑的图书馆,这是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.js
和dist/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)'
}
]
...
}
这似乎现在就可以了,但是我很确定这不是一个干净的解决方案。