前言
折腾,遇到问题,解决,水一篇,周而复始……
然而昨天久违的看了下百度统计,日 IP 已经掉到 20 了……
话说之前也遇到个类似的问题:
正文
以下为去 v2ex 提问时的原始内容;
项目本身使用 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
v 友指出实际引用应该是 cjs,
exports["default"] = main
,会得到一个object
类型的导出;
删除 prod 内对应的 cjs 后变成找不到文件了,是有 mjs 的,然后 pkg 内有如下配置:
"main": "dist/index.cjs",
"module": "dist/index.mjs",
"type": "module",
看来我理解有误,以为使用 module 语法就会使用对应字段的路径?
好像应该按下边的写,虽然并没有测试过 require:
"main": "dist/index.mjs",
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"type": "module",
补充
只导出 default 时的代码:
// msj
export { main as default };
// cjs
exports["default"] = main;
有额外导出时的代码:
// msj
export { main as default, monkeyPath, monkeyRequire };
// cjs
exports["default"] = main;
exports.monkeyPath = monkeyPath;
exports.monkeyRequire = monkeyRequire;
参考
Node.js 如何处理 ES6 模块 - 阮一峰的网络日志
https://www.ruanyifeng.com/blog/2020/08/how-nodejs-use-es6-module.html