在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言: 今天来看看前端的大管家 在每个前端项目中,都有 当我们搭建一个新项目时,往往脚手架就帮我们初始化好了一个 { "name": "my-app", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", "react": "^17.0.2", "react-dom": "^17.0.2", "react-scripts": "4.0.3", "web-vitals": "^1.1.2" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } 当我们克隆一个新的项目到本地时,需要执行 package.json 常见配置项如下: 一、必须属性
1. name
在给
如果 实际上,我们平时开发的很多项目并不会发布在 2. version
版本号的使用规范如下:
可以通过以下命令来查看npm包的版本信息,以react为例: // 查看最新版本 npm view react version // 查看所有版本 npm view react versions 当执行第二条命令时,结果如下: 二、描述信息
1. description
2. keywords
下面是eslint包的描述和关键词: 3. author
"author": "CUGGZ <[email protected]> (https://juejin.cn/user/3544481220801815)" 另一种是对象形式: "author": { "name" : "CUGGZ", "email" : "[email protected]", "url" : "https://juejin.cn/user/3544481220801815" } 4. contributors
"contributors": [ "CUGGZ0 <[email protected]> (https://juejin.cn/user/3544481220801815)", "CUGGZ1 <[email protected]> (https://juejin.cn/user/3544481220801815)" ] "contributors": [ { "name" : "CUGGZ0", "email" : "[email protected]", "url" : "https://juejin.cn/user/3544481220801815" }, { "name" : "CUGGZ1", "email" : "[email protected]", "url" : "https://juejin.cn/user/3544481220801815" } ] 5. homepage
6. repository
"repository": "https://github.com/facebook/react.git" 除此之外,还可以显式地设置版本控制系统,这时就是对象的形式: "repository": { "type": "git", "url": "https://github.com/facebook/react.git" } 7. bugs
"bugs": { "url" : "https://github.com/facebook/react/issues", "email" : "[email protected]" } 最常见的 三、依赖配置通常情况下,我们的项目会依赖一个或者多个外部的依赖包,根据依赖包的不同用途,可以将他们配置在下面的五个属性下: 1. dependencies
npm install <PACKAGENAME> yarn add <PACKAGENAME> 当在安装依赖时使用 npm install --save <PACKAGENAME> 该字段的值是一个对象,该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。 "dependencies": { "react": "^17.0.2", "react-dom": "^17.0.2", "react-scripts": "4.0.3", }, 这里每一项配置都是一个键值对( 版本号遵循主版本号.次版本号.修订号的格式规定:
2. devDependencies
当使用 npm install --save-dev <PACKAGENAME> yarn add --dev <PACKAGENAME> "devDependencies": { "autoprefixer": "^7.1.2", "babel-core": "^6.22.1" } 3. peerDependencies有些情况下,我们的项目和所依赖的模块,都会同时依赖另一个模块,但是所依赖的版本不一样。比如,我们的项目依赖A模块和B模块的1.0版,而A模块本身又依赖B模块的2.0版。大多数情况下,这不是问题,B模块的两个版本可以并存,同时运行。但是,有一种情况,会出现问题,就是这种依赖关系将暴露给用户。 最典型的场景就是插件,比如A模块是B模块的插件。用户安装的B模块是1.0版本,但是A插件只能和2.0版本的B模块一起使用。这时,用户要是将1.0版本的B的实例传给A,就会出现问题。因此,需要一种机制,在模板安装的时候提醒用户,如果A和B一起安装,那么B必须是2.0模块。
"name": "chai-as-promised", "peerDependencies": { "chai": "1.x" } 上面代码指定在安装 需要注意,从npm 3.0版开始, 4. optionalDependencies如果需要在找不到包或者安装包失败时, 需要注意,由于 5. bundledDependencies上面的几个依赖相关的配置项都是一个对象,而 需要注意,这个字段数组中的值必须是在 6. engines当我们维护一些旧项目时,可能对 "engines": { "node": ">=8.10.3 <12.13.0", "npm": ">=6.9.0" }
四、脚本配置1. scriptsscripts 是 先来看一组 "scripts": { "dev": "node index.js", "predev": "node beforeIndex.js", "postdev": "node afterIndex.js" } 这三个js文件中都有一句 // index.js console.log("scripts: index.js") // beforeIndex.js console.log("scripts: before index.js") // afterIndex.js console.log("scripts: after index.js") 当我们执行npm run dev命令时,输出结果如下: scripts: before index.js scripts: index.js scripts: after index.js 可以看到,三个命令都执行了,执行顺序是 通过配置scripts属性,可以定义一些常见的操作命令: "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", "test": "npm run unit", "lint": "eslint --ext .js,.vue src test/unit", "build": "node build/build.js" } 这些脚本是命令行应用程序。可以通过调用 使用好该字段可以大大的提升开发效率。 2. config
"config": { "port": 3000 } 如果运行 console.log(process.env.npm_package_config_port) // 3000 用户可以通过 五、文件&目录下面来看看 1. main
该字段的值是一个字符串: "main": "./src/index.js", 2. browser
"browser": "./src/index.js" 3. module
"module": "./src/index.mjs",
上面三个的入口入口文件相关的配置是有差别的,特别是在不同的使用场景下。在Web环境中,如果使用loader加载ESM(ES module),那么这三个配置的加载顺序是
4. binbin字段用来指定各个内部命令对应的可执行文件的位置: "bin": { "someTool": "./bin/someTool.js" } 这里, scripts: { start: './node_modules/bin/someTool.js build' } // 简写 scripts: { start: 'someTool build' } 所有 上面的配置在 5. filesfiles配置是一个数组,用来描述当把 "files": [ "LICENSE", "Readme.md", "index.js", "lib/" ] 如果有不想提交的文件,可以在项目根目录中新建一个 node_modules .vscode build .DS_Store 6. manman 命令是 Linux 中的帮助指令,通过该指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。如果 "man": [ "./man/npm-access.1", "./man/npm-audit.1" ] man 字段可以指定一个或多个文件, 当执行man {包名}时, 会展现给用户文档内容。 需要注意:
对于上面的配置,可以使用以下命令来执行查看文档: man npm-access man npm-audit 7. directories
在实际的项目目录中,我们可能没有按照这个规范进行命名,那么就可以在 "directories": { "bin": "./bin", "lib": "./lib", "doc": "./doc", "test" "./test", "man": "./man" }, 这个属性实际上没有什么实际的作用,当然不排除未来会有什么比较有意义的用处。 六、发布配置下面来看看和 1. privateprivate字段可以防止我们意外地将私有库发布到npm服务器。只需要将该字段设置为true: "private": true 2. preferGlobal
"preferGlobal": true 3. publishConfig
通常情况下, "private": true, "publishConfig": { "tag": "1.1.0", "registry": "https://registry.npmjs.org/", "access": "public" } 4. osos字段可以让我们设置该 "os" ["linux"] // 适用的操作系统 "os" ["!win32"] // 禁用的操作系统 5. cpu该配置和OS配置类似,用 "cpu" ["x64", "AMD64"] // 适用的cpu "cpu" ["!arm", "!mips"] // 禁用的cpu 可以看到,黑名单和白名单的区别就是,黑名单在前面加了一个“!”。 6. license
常见的协议如下:
可以这样来声明该字段: "license": "MIT" 七、第三方配置
1. typingstypings字段用来指定TypeScript的入口文件: "typings": "types/index.d.ts", 该字段的作用和 2. eslintConfigeslint的配置可以写在单独的配置文件 "eslintConfig": { "root": true, "env": { "node": true }, "extends": [ "plugin:vue/essential", "eslint:recommended" ], "rules": {}, "parserOptions": { "parser": "babel-eslint" }, } 3. babelbabel用来指定Babel的编译配置,代码如下: "babel": { "presets": ["@babel/preset-env"], "plugins": [...] } 4. unpkg使用该字段可以让 "unpkg": "dist/vue.js" 5. lint-staged
"lint-staged": { "*.js": [ "eslint --fix", "git add" ] } 使用 6. gitHooks
"gitHooks": { "pre-commit": "lint-staged" } 这里就是配合上面的 7. browserslist
"browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } 这里指定了一个对象,里面定义了生产环境和开发环境的浏览器要求。上面的 到此这篇关于前端JavaScript大管家 package.json的文章就介绍到这了,更多相关前端大管家 package.json内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论