一、必须属性
-
name
定义项目的名称,不能以".“和”_"开头,不能包含大写字母 -
version
定义项目的版本号,格式为:大版本号.次版本号.修订号
这段代码是一个名为 “webpack” 的 npm 模块的 package.json 文件内容,其中包含了该模块的各种信息和配置。 -
"bin": { "webpack": "bin/webpack.js" }
: 这里的含义是指定了在全局安装时链接到bin/webpack.js
文件的可执行命令为 “webpack”。这使得在项目外部可以直接使用webpack
命令来调用该模块提供的功能。 -
"bundleDependencies": false
: 这个字段指定了当使用npm pack
或npm install
安装模块时,是否将所有依赖打包成一个单独的包。这里设置为false
表示不会打包依赖。 -
"dependencies"
和"devDependencies"
: 分别列出了项目所依赖的生产环境和开发环境的依赖模块,其中指定了每个模块的名称和版本号。 -
"description"
: 提供了对该模块的简要描述信息。 -
"engines": { "node": ">=10.13.0" }
: 指定了该模块在运行时所需要的 Node.js 最低版本。 -
"files"
: 列出了该模块发布到 npm 上时所包含的文件和目录。 -
"homepage"
: 指定了该模块的文档主页。 -
"funding"
: 指定了捐赠信息,告诉用户可以通过哪种方式资助该模块。 -
"lint-staged"
: 包含了在 Git commit 时需要运行的代码检查工具和配置。 -
"main"
: 指定了模块入口文件的路径。 -
"peerDependenciesMeta"
: 用来声明对某些 peer 模块的依赖,以及声明这些 peer 模块是可选的。 -
"types"
: 指定了 TypeScript 类型定义文件的路径。 -
"version"
: 模块的版本号。
这些信息和配置帮助 npm 和开发人员了解了该模块的基本情况、依赖关系,以及提供了一些其他的配置信息。
{
"bin": {
"webpack": "bin/webpack.js"
},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",
"devDependencies": {
"@babel/core": "^7.23.7",
"@babel/preset-react": "^7.23.3",
"@types/glob-to-regexp": "^0.4.4",
"@types/jest": "^29.5.11",
"@types/mime-types": "^2.1.4",
"@types/node": "^20.11.27",
"assemblyscript": "^0.27.22",
"babel-loader": "^8.1.0",
"benchmark": "^2.1.4",
"bundle-loader": "^0.5.6",
"coffee-loader": "^1.0.0",
"coffeescript": "^2.5.1",
"core-js": "^3.6.5",
"coveralls": "^3.1.0",
"cspell": "^8.6.0",
"css-loader": "^5.0.1",
"date-fns": "^3.2.0",
"es5-ext": "^0.10.53",
"es6-promise-polyfill": "^1.2.0",
"eslint": "^8.48.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^27.6.3",
"eslint-plugin-jsdoc": "^48.1.0",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.1.3",
"file-loader": "^6.0.0",
"fork-ts-checker-webpack-plugin": "^9.0.2",
"hash-wasm": "^4.9.0",
"husky": "^9.0.11",
"is-ci": "^3.0.0",
"istanbul": "^0.4.5",
"jest": "^29.7.0",
"jest-circus": "^29.7.0",
"jest-cli": "^29.7.0",
"jest-diff": "^29.7.0",
"jest-environment-node": "^29.7.0",
"jest-junit": "^16.0.0",
"json-loader": "^0.5.7",
"json5": "^2.1.3",
"less": "^4.0.0",
"less-loader": "^8.0.0",
"lint-staged": "^15.2.2",
"lodash": "^4.17.19",
"lodash-es": "^4.17.15",
"memfs": "^4.7.7",
"mini-css-extract-plugin": "^1.6.1",
"mini-svg-data-uri": "^1.2.3",
"nyc": "^15.1.0",
"open-cli": "^8.0.0",
"prettier": "^3.2.1",
"prettier-2": "npm:prettier@^2",
"pretty-format": "^29.5.0",
"pug": "^3.0.0",
"pug-loader": "^2.4.0",
"raw-loader": "^4.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"rimraf": "^3.0.2",
"script-loader": "^0.7.2",
"simple-git": "^3.17.0",
"strip-ansi": "^6.0.0",
"style-loader": "^2.0.0",
"terser": "^5.26.0",
"toml": "^3.0.0",
"tooling": "github:webpack/tooling#v1.23.3",
"ts-loader": "^9.5.1",
"typescript": "^5.4.2",
"url-loader": "^4.1.0",
"wast-loader": "^1.12.1",
"webassembly-feature": "1.3.0",
"webpack-cli": "^5.0.1",
"xxhashjs": "^0.2.2",
"yamljs": "^0.3.0",
"yarn-deduplicate": "^6.0.1"
},
"engines": {
"node": ">=10.13.0"
},
"files": [
"lib/",
"bin/",
"hot/",
"schemas/",
"SECURITY.md",
"module.d.ts",
"types.d.ts"
],
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"homepage": "https://github.com/webpack/webpack",
"lint-staged": {
"*.{js,cjs,mjs}": [
"eslint --cache --fix"
],
"*": [
"prettier --cache --write --ignore-unknown",
"cspell --cache --no-must-find-files"
]
},
"main": "lib/index.js",
"peerDependenciesMeta": {
"webpack-cli": {
"optional": true
}
},
"scripts": {},
"types": "types.d.ts",
"version": "5.91.0"
}
engines
"engines":{
"node":">=8.10.3 <12.13.0",
"npm": ">=6.9.0"
}
- workspaces
单个代码库中统一管理多个包(monorepo),在workspaces声明目录下的package会软链到根目录的node_modules中。 - 初始化项目
- 声明本项目是workspaces模式
"private":"true","workspaces":[ "packages/*" ]
表示所有子包都在packages文件夹下 - 创建子包p1
npm init -w packages/p1 -y
在node_modules/.package-lock.json中可以看到 “link”: true 链接符号信息 - 新建packages/p1/index.js
module.exports="p1包"
- 创建子包p2
npm init -w packages/p2 -y
- 将子包p1添加到p2中
npm i p1 -w p2
安装,卸载等命令都是一样的,只是多了"–workspace="参数(简写-w),用来指定在哪个包中执行命令 - 子包p2使用p1
const p1 = require("p1");console.log("使用",p1);module.exports = 'p2包'
workspaces功能与lerna类似,如果只需简单地管理多个包,workspaces足够了。lerna具有版本管理,发包提示,简化多包项目发布流程等更多功能。