【问题标题】:rollup complains apply is not exported by commonjs module that exports a function汇总抱怨应用不是由导出函数的 commonjs 模块导出的
【发布时间】: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


    【解决方案1】:

    我不认为 '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(),
      ]
    };
    

    【讨论】:

    • 在这个例子中没有,但在我的项目中我确实需要它们,因为依赖项是 npm 包。
    • 我看不出你的例子有什么问题。你需要发布更多
    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多