【发布时间】:2020-11-11 03:46:48
【问题描述】:
// main.js
import fun from './fun';
console.log(fun);
fun.func();
// fun.js
module.exports = require('./fun2').apply({ message : 'this is the message'})
// fun2.js
module.exports = function(){
console.log(this.message)
var inst = this ? this : {}
inst.func = ()=>{console.log('Func was called.')}
return inst
}
// rollup.config.js
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
const cjs = require("rollup-plugin-cjs-es");
export default {
input: 'main.js',
output: {
file: 'bundle.js',
format: 'iife'
},
plugins: [
resolve(),
commonjs({
include: [/node_modules/]
}),
// cjs()
cjs({ nested: true })
]
};
生成以下捆绑包
(function () {
'use strict';
// fun2.js
function fun2(){
console.log(this.message);
return {
func : ()=>{console.log('Func was called.');}
}
}
var _require__$fun2_ = /*#__PURE__*/Object.freeze({
__proto__: null,
'default': fun2
});
// fun.js
var fun = undefined({ message : 'this is the message'});
// main.js
console.log(fun);
console.log(fun.message);
}());
当以下错误间歇性发生时产生。
$ ./node_modules/rollup/dist/bin/rollup -c
main.js → bundle.js...
(!) Missing exports
https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module
fun.js
apply is not exported by fun2.js
3:
4: import * as _require__$fun2_ from "./fun2";
5: export default _require__$fun2_.apply({ message : 'this is the message'});
^
(!) Plugin rollup-plugin-cjs-es: 'fun2.js' doesn't export names expected by 'fun.js'
created bundle.js in 72ms
使用和不使用嵌套的 cjs 交替注释:true
// cjs()
cjs({ nested: true })
在 rollup.config.js 中似乎可靠地导致第一次使用 cjs 构建错误({nested: true })。使用 cjs({ nested: true }) 重复构建不会产生相同的错误。然而,在我的项目中,以这种方式导出的第三方依赖项 - 错误始终发生。
由于某种原因 rollup 选择生成
var _require__$fun2_ = /*#__PURE__*/Object.freeze({
__proto__: null,
'default': fun2
});
在function.apply上爆炸了
// fun.js
module.exports = require('./fun2').apply({ message : 'this is the message'})
//as bundle.js
// fun.js
var fun = undefined({ message : 'this is the message'});
请帮忙。在这个测试用例中很难找到这个。我的项目仍然没有构建,因为这个错误一直发生。
【问题讨论】:
标签: javascript node.js commonjs rollup rollupjs