javascript - npm 多模块和主入口点

标签 javascript node.js npm es6-modules

我正在构建一个支持 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/

相关文章:

javascript - 回调函数中的 for 循环中的回调函数

javascript - 有没有办法在 Op.op sequelize 中循环遍历许多参数的对象

javascript - 使用 mapDispatchToProps 避免 no-shadow eslint 错误

javascript - 无法在js中的条件语句中比较0

javascript - 从Elasticsearch下载300,000+行作为.csv文件

javascript - Wallet Connect/Web3 Provider 仅通过 imoprting 显示很多错误

javascript - 如何在 Bootstrap 下拉菜单上编辑 CSS?

javascript - 如何查找没有日期部分的时间间隔之间的重叠

javascript - ; [HPM] 尝试代理请求时发生错误

node.js - NodeJS - req.params 未定义