gpt4 book ai didi

javascript - npm 多模块和主入口点

转载 作者:行者123 更新时间:2023-12-03 12:15:47 27 4
gpt4 key购买 nike

我正在构建一个支持 CommonJS 和 ES 模块的包。对于单个入口点,我可以正常工作。我将代码编写为 ESM,并在发布之前使用 Babel 将其编译为 CJS。我的 package.json 的相关位看起来像这样:

  "main": "cjs/",
"module": "esm/",
"scripts": {
"test": "jest ./test",
"clean": "rm -rf cjs",
"build": "npm run clean && babel esm --out-dir cjs",
"prepare": "npm test && npm run build"
}

所以我的 index.jsesm/index.js , 和 cjs/index.js在包发布之前不存在。当使用 require 包含软件包时(例如 const myPackage = require('my-package') ),它将从 cjs/ 中提取.如果它是导入的(例如 import myPackage from 'my-packge' ),它将从 esm/ 中提取.

我的问题是我希望能够从包中导入其他文件(例如 import adapter from 'my-package/adapters/mysql'const adapter = require('my-package/adapters/mysql') )。但是如果我以这种方式包含它,将找不到该文件。

我可以使用完整路径(例如 import adapter from 'my-package/esm/adapters/mysql'const adapter = require('my-package/cjs/adapters/mysql') )导入它。但我不想在路径中明确指定模块类型。似乎 node 已经知道如何区分 CJS 和 ES 模块(它知道从 main 要求和从 module 导入),所以我希望可以对多个文件做同样的事情。

有没有什么方法可以包含一个包,正如我上面所描述的,而不必明确指定 esm/ 的路径或 cjs/ ?

最佳答案


//the project(package) mcktools's package.josn
"main": "dist/index.js",
"exports": {
".": "dist/index.js",
"./cmd": "dist/nodejs",
"./web": "dist/web",
}

//js import the package mcktools:
import {file} from 'mcktools/cmd'

关于javascript - npm 多模块和主入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136358/

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