乐趣区

关于前端:packagejson中的字段详解来自于官方文档

关上 npm 的官网文档 npm Docs

{
  // 发现以下的 31 个字段都是官网的规范
  "name": "vuex",   // 公布时必须,不得和现有 npm 包重名, 能够通过 @xxx/vuex 加个范畴,范畴参见 https://docs.npmjs.com/cli/v8/using-npm/scope
  "version": "4.0.2", // 公布时必须
  "private": false, // 是否公有,如果要公布公共包,这个值为 true. 
  "description": "state management for Vue.js", // 包的简要形容,"keywords": ["vue", "vuex"],  // 关键字搜寻,有助于搜寻发现包,"homepage": "https://github.com/vuejs/vuex#readme",  // 包的主页 url,"bugs": "https://github.com/vuejs/vuex/issues",  // 提 issues 的地址,"license": "MIT",  // 许可证
  "author": "Nicholas C. Zakas",  // 作者
  "contributors": [   // 代码贡献者
    {
      "name": "Boris Cherny",
      "url": "https://github.com/bcherny",
      "githubUsername": "bcherny"
    },
    {
      "name": "Lucian Buzzo",
      "url": "https://github.com/lucianbuzzo",
      "githubUsername": "lucianbuzzo"
    },
  ],
  "funding": {   // 捐献地址
    "type": "opencollective",
    "url": "https://opencollective.com/typescript-eslint"
  },

  // 将包作为依赖,装置到本地时,蕴含的内容。有一些不指定,也总会蕴含进去,如 package.json,README,LICENSE/LICENCE,本文件中 main 字段援用的文件,有些不指定,总会被排除.npmrc,node_modules
  //files 优先级较高。不能通过.npmignore 和.gitignore 排除掉。"files": [
    "dist",
    "types/index.d.ts",
    "types/helpers.d.ts",
    "types/logger.d.ts",
    "types/vue.d.ts"
  ],


  "main": "dist/vuex.cjs.js",    //cjs 模块援用的入口,执行 require("vuex") 时调用。"browser": "dist/vuex.esm-browser.js", // 浏览器端应用

  "bin": {    // 可执行文件门路,他们会被增加到 环境变量的 PATH 中。在控制台运行 >vite 命令时调用。"vite": "bin/vite.js"
  },
  "man": "","directories":"",
  "repository": {  // 代码仓库所在位置
    "type": "git",
    "url": "git+https://github.com/vuejs/vuex.git"
  },
  "scripts": {  // 执行脚本命令
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build",
    "test": "vue-tsc --noEmit && vite build --mode test",
    "preview": "vite preview"
  },
  "config": {}
    "dependencies": {   // 生产环境依赖的包,不要把开发环境的包放到此处,比方 eslint,babel,typescript,sass 等。"echarts": "5.3.0",   // 版本严格匹配,装置时,会精确的装置 5.3.0 版本。参见 https://github.com/npm/node-semver#versions
    "moment": ">2.29.1",  // 装置大于 2.29.1 的包,比方 2.29.2,2.30.0,3.0.0。参见 https://github.com/npm/node-semver#versions
    "normalize.css": "~8.0.1", // 大抵大于 8.0.1, 8.0 能够,然而 8.1.x 不能够;
    "element-plus": "^2.2.13", // 小于第一个非 0 的数字即可。比方 ^1.2.3,则 <2.0.0 即可,比方 ^0.2.3,则 <0.3.0 即可,又比方 0.0.3,则 <0.0.4 即可
  },
  "devDependencies": {   // 仅仅在开发中依赖的包,在打包时,不会被打进去的模块。"@babel/core": "^7.12.16",
    "@babel/eslint-parser": "^7.12.16",
    "@vue/cli-service": "~5.0.0",
    "eslint-config-prettier": "^8.3.0",
    "sass": "^1.32.7",
    "sass-loader": "^12.0.0",
  },
  "peerDependencies": {   // 如果以后包依赖某个包,那么当以后包被装置时,依赖的那个包也一并装置。"vue": "3.2.31"
  },
  "peerDependenciesMeta": "","bundleDependencies":"",
  "optionalDependencies": "","overrides":"",
  "engines": {      // 举荐的 node 和 npm 版本,如果不匹配也不会报错,只是倡议满足版本。"node": ">=0.10.3 <15",
    "npm": "~1.0.20"
  },
  "os": ["darwin", "linux"],    // 指定模块运行在指定操作系统上
  "cpu": ["x64", "ia32"],   // 如果代码仅在某些 cpu 架构上运行,则能够指定哪些架构。"publishConfig": {"access": "public",},
  "workspaces": "",


  // 上面的字段不是标准,却很重要
  "module": "dist/vuex.esm-bundler.js", //esm 援用时的入口,执行 import vuex from "vuex" 时调用。留神此字段不是标准,然而却被 rollup 和 webpack 大量应用,将来极有可能成为标准。"exports": {  // 导出申明,在导入模块和子模块时,会应用不同的门路。".": {
      "require": "./dist/vuex.cjs.js",  // 应用 require 时导入
      "import": "./dist/vuex.mjs",      // 应用 import 时导入
      "browser": "./dist/vuex.umd.js",  // 浏览器端应用导入
      "types": "./dist/types/vuex.d.ts",  //ts 环境应用
    },
    ".": "./dist/vuex.umd.js",     // import "vuex" 时,会加载 vuex/dist/vuex.umd.js 门路文件
    "./sub/path": "./secondary.js", // import "vuex/sub/path" 时,会加载 vuex/secondary.js 门路文件
  },
  "unpkg": "dist/vuex.global.js",  //CDN 服务地址
  "jsdelivr": "dist/vuex.global.js", //CDN 服务地址
  "typings": "types/index.d.ts",   // 定义 typescript 申明文件的地址
}

当然除了下面的字段,还有一些其余中央,尽管 npm 官网没有指定,然而咱们仍然在应用。比方

"browserslist": [
    "> 1%",
    "last 2 versions"
],
"babel":{presets: ["@vue/cli-plugin-babel/preset"],
},
"prettier":{
  "trailingComma": "es5",
  "tabWidth": 4,
  "semi": false,
  "singleQuote": true
}

有个留神点:
在 package.json 中,有三个字段能够定义援用包的入口点

module // 定义次要入口点,专门为 esm 提供,目标时 tree-shaking,没有时,找 main

main // 定义次要入口点,esm 和 cjs 提供。

exports // 定义多个入口点(举荐应用),优先级比下面两个高。为 esm 和 cjs 提供,在引入 exports 之外的门路时,会报错。详情参考 https://nodejs.org/dist/lates…

package.json 中的字段,在下图的体现

上面是依赖关系,相似于这样的关系 Dependency —> vuex—->Dependents,vuex 依赖 Dependency 中的包,Dependents 又依赖于 vuex 包。

退出移动版