main字段指定CommonJS模块入口文件,值为相对于package.json的静态路径字符串,如"index.js"或"src/index.js",不支持"./"前缀、glob或变量,Node.js通过require加载包时优先读取该字段指向的文件并返回其module.exports。

在 CommonJS 规范下,package.json 中的 main 字段用于指定模块的入口文件。Node.js 在通过 require() 加载一个包时(例如 require('some-package')),会优先读取该包 package.json 中 main 字段指向的文件路径,并将其作为模块导出内容。
这个字段的值是一个相对路径字符串,必须是相对于 package.json 所在目录的文件路径,通常指向一个 .js 文件(如 index.js、lib/index.js 或 dist/index.cjs 等)。
main 字段怎么写才有效
-
✅ 正确示例:
{ "main": "index.js" }表示入口是
package.json同级目录下的index.js。立即学习“Java免费学习笔记(深入)”;
-
✅ 带子目录也合法:
{ "main": "src/index.js" }表示入口是
src/index.js(只要该文件存在且可被 require)。 -
❌ 错误写法(不会报错但无法加载):
{ "main": "./index.js" // Node.js 不支持前缀 ./,会被忽略或解析失败 } ⚠️ 注意:路径不支持 glob、变量、条件判断,就是纯静态字符串。
main 字段和 CommonJS 的关系
main是 Node.js 对 CommonJS 模块系统的约定,不是 ECMAScript 标准的一部分。
dmap-jsapi-skill下载DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
-
当你执行
const pkg = require('my-package'),Node.js 就会:- 找到
my-package的package.json - 读取
main字段(若不存在,则 fallback 到index.js) - 把对应文件
require进来,并将它的module.exports作为返回值
- 找到
如果
main指向的文件本身又require其他文件,这些依赖链仍遵循 CommonJS 规则(同步加载、缓存机制等)。
实际配置建议
保持
main指向一个能直接运行、导出合理 API 的文件;若项目同时支持 ESM,可额外配置
exports字段(优先级高于main)或module字段(某些打包工具识别);避免让
main指向未编译的源码(如 TypeScript 文件),Node.js 默认不处理.ts;-
可配合
types字段提供类型提示(TypeScript 用户友好):{ "main": "dist/index.cjs", "types": "dist/index.d.ts" }
验证 main 是否生效
在项目根目录运行:
node -p "require('./').default"或写个测试脚本:
// test.js
const myLib = require('.');
console.log(myLib);确保它输出的是你期望的 module.exports 内容。
不复杂但容易忽略细节。

















