rollup抱怨导出函数的commonjs模块没有导出apply


// 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
});

在功能上爆炸。应用

// 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'});

请帮忙。在这个测试用例中,我很难找到这个。我的项目仍然没有建立,因为这个错误总是发生。

我不认为‘rollup-plugin-cjs-es’和‘@rollup/plugin-node resolve’有用。

import commonjs from '@rollup/plugin-commonjs';
export default {
input: 'main.js',
output: {
file: 'bundle.js',
format: 'iife'
},
plugins: [
commonjs(),
]
};

最新更新