gpt4 book ai didi

javascript - 使用 CommonJS 模块汇总将未命名函数导出为模块?

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:18 25 4
gpt4 key购买 nike

我有一个名为 inner.js 的 CommonJS 模块,它定义一个函数,然后将该函数导出为整个模块:

// inner.js, a legacy CommonJS module
var foo = function() { return 42; };
module.exports = foo;

在 Node 中,我可以轻松地验证其按原样工作。

> var inner = require('./inner.js');
> inner() // prints 42

但这是一个遗留模块,我想从 ES6 模块中使用它,称为 outer.js:

// outer.js, an ES6 module
import * as inner from "./inner.js";
export function bar() { return inner(); }

我看到rollup-plugin-commonjs在这些情况下常用,但当 CommonJS inner.js 模块将函数导出为整个模块时,我无法让它工作。如果在运行 rollup 并将结果转储到 loadme.js 后,我尝试运行加载 ES6 外部模块并尝试调用最初在内部 CommonJS 模块中定义的函数,则会收到错误:

> var outer = require('./loadme.js')
undefined
> outer.bar()
TypeError: inner$2 is not a function
at Object.bar (/.../so-rollup-question/loadme.js:27:25)

我认为我只是未能正确加载 CommonJS 模块,以致模块本身充当函数。我对 UMD 不够熟悉,无法从检查汇总输出中获得任何有意义的信息。

本文的其余部分是关于一个最小示例。

<小时/>

这是我非常简单的 index.js:

// index.js
export {bar} from "./outer.js";

由我的汇总配置读取:

// rollup.config.js
import npm from "rollup-plugin-node-resolve";
import commonjs from 'rollup-plugin-commonjs';

export default {
entry : "index.js",
format : "umd",
moduleName : "sphereModule",
plugins : [ npm({jsnext : true}), commonjs() ],
dest : "loadme.js"
};

我有一个complete clonable repository演示问题。

最佳答案

直接分配给module.exports基本上等同于具有默认导出。因此,按如下方式导入模块应该可以工作:

import inner from "./inner.js";

关于javascript - 使用 CommonJS 模块汇总将未命名函数导出为模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com