{
"name": "package-name",
"version": "0.0.1",
// 主版本: 大的变动、可能影响了向后的兼容性
// 次要版本: 增加了新的特性不改变已有特性
// 小版本: 修改bug或其他小的改动
"description": "这是xxxx",
"homepage": "主页信息 表示项目首页的url",
"bugs": { // 接收问题反馈的url email | git issues
"url": "https://github.com/xxx/xxx/issues",
"email": ""
},
"repository": { // 仓库地址
"type": "git",
"url": "git+https://github.com/xxx.git"
},
"keywords": [],
// yarn的workspace功能,能够管理多个子文件夹项目之间的依赖安装等统一命令,以及解决包间本地link问题
"workSpace": [
],
"author": {
"name": "lmhtolin",
"email": "",
"url":""
},
"license": "ISC",
"files": [ // 代码包下载安装完成时包括的所有文件 [*] 表示所有
"index.js",
"createReactApp.js"
],
"main":"index.js", // 项目主要入口,启动项目的文件 -> react
"private": true, // 无法通过 npm publish 发布代码
"engines": { // 项目依赖的环境
"node": ">=12",
"npm": ">= 4.0.0"
},
"browserslist": [ // 兼容
"last 2 versions",
"> 1%"
],
"dependencies": { // 应用依赖/业务依赖 [常用] npm i xxx --save 线上代码的一部分
"foo": ">1.0.0 <=3.0.0", // ^1.2.3 兼容版本 ~1.2.3 最近可用
},
"devDependencies": {}, // 开发依赖 [常用] npm i xxx --save-dev 单元测试 打包工具 等
"peerDependencies": { // 同伴依赖
// 发布包的需求可能用到 提示宿主环境去安装插件,解决插件与所依赖包不一致的问题 例如 element-ui
// 意思就是 如果安装本包,则需要按照要求安装A,B,C包
// 如果组件与环境依赖的包不一致,则会告警 手动安装 组件的依赖包
},
"bundledDependencies": [ // 打包依赖
// npm pack
// .tgc 压缩包
// 必须在 devDependencies dependencies 声明过 npm i xxx.tgz 就同样会安装这里的两个依赖
],
"optionalDependencies": {}, // 可选依赖
"bin": { // 例子 create-react-app rimraf
// npm 会在全局可执行 bin 文件安装目录(/usr/local/bin) 创建一个指向 对应包的 软连接
// 如果局部安装 npm 会在本地创建一个可执行文件的 软链接
// 这时候可直接输入 ./node_modules/.bin/rimraf 执行 -> npx rimraf
"create-react-app": "index.js"
// #! /usr/bin/env node <- 软链接 <path node位置> node index.js 第一行
},
"scripts": { // 自定义脚本命令
// npm run 新建一个shell, 该脚本会将当前项目的 node_modules/.bin 的绝对路径加入环境变量 PATH 中,执行结束再将环境变量恢复原样
// npm run env 查看脚本运行的环境变量
// shell 命令
// mkdir xxx 创建文件夹
// 多命令 并行执行 npm run script1 & npm run script2 串行执行 npm run script1 && npm run script2
// 钩子 prescript -> script -> postscript 例如 npm run build => npm run prebuild -> npm run build -> npm run postbuild
// 传参 process.argv -> webpack.config.js
// "dev": "webpack --params=123 --name=lmhtolin", // 截取参数 const rawArgv = process.argv.slice(2)
// "dev": "NODE_ENV=production webpack", // 如果阻塞 需要加上 cross-env -> npm i cross-env -D
},
"sideEffects": false // 正常对所有模块进行 tree shaking
"sideEffects": ['*.css','@babel/polyfill'] // 在数组里面排除不需要使用tree shaking的模块
}
// webpack.config.js
const path = require("path");
// console.log(process.argv) // -> string[]
const rawArgv = require("minimist")(process.argv.slice(2)); // object {params: 123, name: 'lmhtolin'} 即传过来的参数
const env = process.env.NODE_ENV; // production