package.json 的 main 和 module 字段

2022-07-27 15:57:01 +08:00
 zficode

最近自己写了一个 npm 包,在 package.json 下面有如下代码:

{
  "main": "./dist/index.common.js",
  "module": "./dist/index.esm.js",
  "types": "./dist/index.d.ts",
}

按照我的理解,在 esm 中用 import 导入应该导入的是 module 字段指向的 js ,但是我建了一个 npm 项目,代码如下:

import a from "my-utils";

执行命令: node index.mjs 导入的却是 main 指向的 js 文件。

1406 次点击
所在节点    前端开发
7 条回复
mxT52CRuqR6o5
2022-07-27 16:02:22 +08:00
好奇怪哦,node 版本是 12 以上吗
hua123s
2022-07-27 16:18:47 +08:00
https://docs.npmjs.com/cli/v8/configuring-npm/package-json#main 好像是没有 module 这个属性的,都是打包工具才认。
liliclinton
2022-07-27 16:25:01 +08:00
需要在 package.json 中声明"type": "module"
liliclinton
2022-07-27 16:31:21 +08:00
zficode
2022-07-27 16:59:55 +08:00
@liliclinton 但是我在 npm 包里面加上了 type: module 的时候,使用 require 会报错
zficode
2022-07-27 17:00:38 +08:00
目前我改成了这样子, @hua123s @liliclinton @mxT52CRuqR6o5
```json
{
"main": "./dist/index.common.cjs",
"module": "./dist/index.esm.mjs",
"types": "./dist/index.d.ts",
"exports": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.common.cjs"
},
}
```
liliclinton
2022-07-27 17:33:20 +08:00
@zficode 那确实是不允许的

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

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

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

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

© 2021 V2EX