package.json 中的配置

简介: package.json 中的配置

image.png


本文已参与「新人创作礼」活动,一起开启掘金创作之路。

关键词:package.json 项目开发 包开发

package.json 平时常用,但是配置项很多,所以把常用的一些配置及其意思整理成操作手册,以便不时之需。


基本信息


{
  "name": "package-name",
  "version": "0.0.1", // {大的变动、可能影响了向后的兼容性}.{feat}.{bugfix}
  "description": "这是xxxx",
  "homepage": "主页信息 表示项目首页的url",
  // 接收问题反馈的url email | git issues
  "bugs": { 
    "url": "https://github.com/xxx/xxx/issues",
    "email": ""
  },
  // 仓库地址
  "repository": { 
    "type": "git",
    "url": "git+https://github.com/xxx.git"
  },
  "keywords": [],
  "author": {
    "name": "",
    "email": "",
    "url": ""
  },
  // 无法通过 npm publish 发布代码
  "private": true, 
  // publishConfig 配置会在模块发布时生效,用于设置发布时一些配置项的集合。
  "publishConfig": {
    "tag": "1.1.0",
    "registry": "https://registry.npmjs.org/",
    "access": "public"
  }
  "license": "ISC",
}

项目执行 [typings, main, module, browser, exports, config]


{
  // TypeScript的入口文件
  "typings": "types/index.d.ts", 
  // 项目主要入口,启动项目的文件
  "main": "index.js",
  // 指向支持 ESM 模块的入口文件
  "module": "./src/index.mjs",
  // 支持 UMD 模块的入口文件,如果 npm 包只在 web 端使用,用 browser 来定义入口文件。
  "browser": "./src/index.js", 
  // 控制子目录的访问路径
  "exports": {
    ".": {
      // 用户 import 使用时
      "import": {
        // 根据环境引入不同的文件
        "node": "./dist/xxx.runtime.mjs",
        "default": "./dist/xxx.runtime.esm.js"
      },
      // 除了 require 对应 main 字段之外,其它都一样
      "module": "index.esm.js",
      "browser": "index.umd.js",
      "require": "index.common.js",
      "types": "index.d.ts"
    },
    // 用户可以导入 dist 文件夹下的文件
    "./dist/*": "./dist/*"
  },
  // config 字段用来配置scripts运行时的配置参数
  "config": { 
    "port": 3000
  },
  // 执行脚本入口
  "bin": {},
  // 自定义脚本命令
  "scripts": {},
}

bin

npm 会在全局可执行 bin 文件安装目录 /usr/local/bin 创建一个指向对应包的软连接。

// ./bin/index.js
#!/usr/bin/env node
console.log('hello')
"bin": {
  "tc": "./bin/enter.js"
},
// npx tc

scripts


npm run env 查看脚本运行的环境变量

npm run {dev}, 意思就是跑 scripts 中的 dev 脚本,这个脚本会将当前项目的 node_modules/.bin 的绝对路径加入环境变量 PATH 中,执行结束再将环境变量恢复原样。

{
  "scripts": {
    "dev": "webpack --params=123 --name=kane", // 截取参数 const rawArgv = process.argv.slice(2)
    "dev": "NODE_ENV=production webpack", // 如果阻塞 需要加上 cross-env -> npm i cross-env -D
  }
}
// webpack.config.js
const path = require('path');
// console.log(process.argv)
const rawArgv = require("minimist")(process.argv.slice(2)) // object {params: 123, name: 'kane'}
const env = process.env.NODE_ENV // production


  • 多命令
  • 并行执行 npm run script1 & npm run script2
  • 串行执行 npm run script1 && npm run script2



项目依赖 [private, engines, browserslist]

{
  // 无法通过 npm publish 发布代码
  "private": true,
  // 项目依赖的环境 
  "engines": {
    "node": ">=12",
    "npm": ">= 4.0.0"
  },
  // 兼容浏览器
  "browserslist": [
    "last 2 versions",
    "> 1%"
  ],
  // 应用依赖/业务依赖
  "dependencies": { 
    // 线上代码的一部分
    "foo": ">1.0.0 <=3.0.0", // ^1.2.3 兼容版本 ~1.2.3 最近可用
  },
  // 开发依赖 单元测试 打包工具等
  "devDependencies": {},
  // 同伴依赖
  "peerDependencies": {},
  // 打包依赖
  "bundledDependencies": [],
  // 可选依赖
  "optionalDependencies": {},
}


peerDependencies


同伴依赖。

如果安装本包,则需要按照要求安装其他包。

发布包(组件)可能用到。提示宿主环境去安装插件,解决插件与所依赖包不一致的问题,例如 element-ui

如果组件与环境依赖的包不一致,则会告警 手动安装 组件的依赖包。


bundledDependencies


打包依赖。npm pack  -> .tgc 压缩包。压缩包中会包含 bundledDependencies 声明的包。

在发布时会将这个对象中的包,打包到最终的发布包里。

必须在 devDependencies 或者 dependencies 声明过。

npm i xxx.tgz 就同样会安装这里的两个依赖

{
  "devDependencies": {
    "demo": "^0.0.1",
  },
  "dependencies": {
    "hello-else": "^1.0.0"
  },
  "bundledDependencies": [
    "demo",
    "hello-else"
  ]
}


optionalDependencies


可选依赖。

optionalDependencies 对象中的包会覆盖 dependencies 中同名的包,是为了解决在找不到包或者安装包失败的时候,npm i 仍然能够继续运行。


配置输出


sideEffects

协助 Webpack 进行 tree shaking。移除未引用的代码。

{
  "sideEffects": false, // 正常对所有模块进行 tree shaking
  "sideEffects": ["*.css", "@babel/polyfill"] // 在数组里面排除不需要的tree shaking模块
}


配合依赖使用

配合 eslint 等使用,具体可参考 前端项目添加代码规范



{
  // eslint的配置
 "eslintConfig": {
   "root": true,
   "env": {
     "node": true
   },
   "extends": [
     "plugin:vue/essential",
     "eslint:recommended"
   ],
   "rules": {},
   "parserOptions": {
     "parser": "babel-eslint"
   },
   "babel": { // 指定Babel的编译配置
   "presets": ["@babel/preset-env"],
   "plugins": []
 },
 "lint-staged": { // 通常配合gitHooks一起使用
   // 在Git暂存文件上运行linters的工具,
   // 配置后每次修改一个文件即可给所有文件执行一次lint检查
   "*.js": [
     "eslint --fix",
     "git add"
   ]
 },
 "gitHooks": {
   // gitHooks用来定义一个钩子,在提交(commit)之前执行ESlint检查。
   "pre-commit": "lint-staged"
 }
}


目录
相关文章
|
6月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
uniapp manifest.json 完整参数配置参考文档
uniapp manifest.json 完整参数配置参考文档
176 0
|
6月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
336 0
|
1月前
|
存储 JavaScript 前端开发
TypeScript :使用mock提供数据&as const 的使用&tsconfig.json配置
本文介绍了如何在项目中使用 Mock 提供数据,包括安装依赖、配置 Vite 和 TypeScript,以及如何使用 `as const`、元组和 tsconfig.json 配置文件。通过这些配置,可以实现更灵活和高效的开发体验。
|
3月前
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
4月前
tasks.json、launch.json、c_cpp_properties.json配置
tasks.json、launch.json、c_cpp_properties.json配置
73 0
|
5月前
|
机器学习/深度学习 JSON 移动开发
详细解读BootStrap智能表单系列八表单配置json详解
详细解读BootStrap智能表单系列八表单配置json详解
35 0
|
5月前
|
JavaScript
TypeScript编译(tsconfig.json配置)
TypeScript编译(tsconfig.json配置)
|
5月前
|
Web App开发 JavaScript
使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件
使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件
217 0
|
5月前
|
JavaScript 编译器 IDE
36.【TypeScript 教程】tsconfig.json 配置
36.【TypeScript 教程】tsconfig.json 配置
36 0