V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wdssmq
V2EX  ›  问与答

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

  •  
  •   wdssmq · 2023-01-30 18:09:18 +08:00 · 685 次点击
    这是一个创建于 694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目本身使用 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

    3 条回复    2023-01-31 20:22:39 +08:00
    Aloento
        1
    Aloento  
       2023-01-30 18:21:14 +08:00   ❤️ 1
    monkey() 能在 prod 中正常调用吗
    然后你 prod 有可能引的是 cjs 的,那么 exports["default"] = main; 导出确实是个 object
    具体的还需要其他大佬解答
    wdssmq
        2
    wdssmq  
    OP
       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
        3
    Aloento  
       2023-01-31 20:22:39 +08:00
    我个人是不会产出 CJS 的,一直都是 MJS 一套带走。然后你用 import 语法,有的 Babel 配置也会给你转成 CJS 语法。主要还是看你怎么设置的,试试 rollup 的默认配置,我用过几次没有任何问题,记得设置 pkg 为 module
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.