「Node.js」一个 export/import 问题求解答

2023-01-30 18:09:18 +08:00
 wdssmq

项目本身使用 rollup 构建,然后功能上是一个 rollup-plugin ,一开始只导出了一个函数 monkey ,后边加了功能,结果就是拿到的东西不统一了。

虽然可以先判断一下,然而还是想弄清为什么会有这种差异……

export { main as default, monkeyPath, monkeyRequire };
// for test
import monkey, { monkeyPath, monkeyRequire } from "../../dist/index.mjs";

console.log("typeof monkey:", typeof monkey);
// typeof monkey:function
// for prod
import monkey, { monkeyPath, monkeyRequire } from "rollup-plugin-monkey";

console.log("typeof monkey:", typeof monkey);
// typeof monkey:object
console.log("typeof monkey.default:", typeof monkey.default);
// typeof monkey.default:function

项目源码: https://github.com/wdssmq/rollup-plugin-monkey

这里可以看到 dist/ 内容: https://www.npmjs.com/package/rollup-plugin-monkey?activeTab=explore

最终项目使用的配置文件: https://github.com/wdssmq/rollup-plugin-monkey/blob/main/test/gm/rollup.config.mjs

685 次点击
所在节点    问与答
3 条回复
Aloento
2023-01-30 18:21:14 +08:00
monkey() 能在 prod 中正常调用吗
然后你 prod 有可能引的是 cjs 的,那么 exports["default"] = main; 导出确实是个 object
具体的还需要其他大佬解答
wdssmq
2023-01-31 09:02:15 +08:00
@Aloento 感谢!

删除 prod 内对应的 cjs 后变成找不到文件了,是有 mjs 的,然后 pkg 内有如下配置:

```json
"main": "dist/index.cjs",
"module": "dist/index.mjs",
"type": "module",
```

看来我理解有误,以为使用 module 语法就会使用对应字段的路径?

好像应该按下边的写,虽然并没有测试过 require:

```json
"main": "dist/index.mjs",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"type": "module",
```

再次感谢!
Aloento
2023-01-31 20:22:39 +08:00
我个人是不会产出 CJS 的,一直都是 MJS 一套带走。然后你用 import 语法,有的 Babel 配置也会给你转成 CJS 语法。主要还是看你怎么设置的,试试 rollup 的默认配置,我用过几次没有任何问题,记得设置 pkg 为 module

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX