У меня есть библиотека, которую я объединяю с использованием накопительного пакета, и это раздел из файла 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) оказывается, что оба они должны быть в порядке? IЯ все еще немного не уверен в этом.
Кроме того, когда я просто сделал это:
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)'
}
]
...
}
, и это кажетсясделайте это сейчас, но я уверен, что это не чистое решение.