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"
 }
}


目录
相关文章
|
5月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
uniapp manifest.json 完整参数配置参考文档
uniapp manifest.json 完整参数配置参考文档
148 0
|
5月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
255 0
|
2月前
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
3月前
tasks.json、launch.json、c_cpp_properties.json配置
tasks.json、launch.json、c_cpp_properties.json配置
32 0
|
4月前
|
机器学习/深度学习 JSON 移动开发
详细解读BootStrap智能表单系列八表单配置json详解
详细解读BootStrap智能表单系列八表单配置json详解
25 0
|
4月前
|
JavaScript
TypeScript编译(tsconfig.json配置)
TypeScript编译(tsconfig.json配置)
|
4月前
|
Web App开发 JavaScript
使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件
使用CRXjs、Vite、Vue 开发 Chrome 多页面插件,手动配置 vite.config.ts 和 manifest.json 文件
144 0
|
4月前
|
JavaScript 编译器 IDE
36.【TypeScript 教程】tsconfig.json 配置
36.【TypeScript 教程】tsconfig.json 配置
23 0
|
5月前
|
JSON 运维 Kubernetes
云效产品使用报错问题之流水线中配置了AppStack,构建时下载的制品内容为json字符串,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
下一篇
无影云桌面