package.json文件配置
package.json文件是Node.js项目中的一个描述文件,执行npm init命令初始化项目后,在项目的根目录下自动生成该文件。
package.json包含了项目的配置信息以及项目所需的各种模块,使用npm install(简写:npm i)命令后会自动根据package.json下载所需的模块。
1.package.json常见属性说明
name:名称{String}
version:版本{String}
private:
{ Boolean }
设置为 true,npm 就不会发布成功。
可以防止私有repositories不小心被发布出去。
description:项目描述,可用于 npm 官网搜索{String}
main:npm包项目的主要入口文件,必须的,{ String }
默认:"./index.js"
browser:同 main,当包为 web 包时,browser 的优先级比 main 高
bin:定义了可执行文件{ String | Object }
man:项目手册(manuel)地址{ String | Array }
directories:用来描述各个功能模块存放的路径{ Object }
module:打包需要的入口文件
typings:TypeScript 的入口文件
files: 发布package时,控制哪些文件会发布上去{ Array | String },如:
"files": ["src","dist/*.js","types/*.d.ts"]
gitHooks:代码质量检查,如:
"gitHooks": {"pre-commit": "lint-staged","commit-msg": "node scripts/verify-commit-msg.js"}
scripts:启动脚本,一般较长的命令可以设置脚本启动{ Object }
repository:git仓库所在位置{ Object | String },如:
"repository": {"type": "git","url": "git地址"}
keywords:项目关键字,可用于 npm 官网搜索{String}
author:项目作者,只能存在一个作者{ String | Object }
contributors:贡献者{ Array }
maintainers:维护者{ Array }
license:开源协议{ String | Object }
除了设置合适的 license 类型外,还可以设置 "private": true 来避免项目发布。
bugs:bug地址{ String | Object }
homepage:项目官网地址{String}
dependencies:项目依赖(生产){ Object }
devDependencies:项目依赖(开发){ Object }
config:设置一些用于npm包的脚本命令会用到的配置参数{ Object }
peerDependencies:其他依赖包{ Object }
engines:指定项目所需要的node.js版本{ Object },如:
"engines": {"node": ">=8.9.1","npm": ">=5.5.1","yarn": ">=1.3.2"}
browserslist:支持的浏览器,如:
"browserslist": ["last 3 Chrome versions","last 3 Firefox versions","Safari >= 10","Explorer >= 11","Edge >= 12","iOS >= 10","Android >= 6"]
2.属性详解
2.1 name
- 不要使用和 Node 核心模块一样的名称
- 包名中不要包含 js、node 等字眼。默认就是 js 文件,引擎也可以通过 engines 字段指定
- 包名起了是给别人用的,所以最好短点,且见名知意( 这个名字可能在require()方法中被调用 )
- 如果你想将项目发布到 npm 上的话,包名必需且唯一。所以起名之前最好先去官网查查有没有重名
tips: 此外,包还可以加前缀,将包放到同意的命名空间下(如 babel7)
如:@myorg/mypackage。
2.2 version
{ String }
项目版本号。
如果想将项目发布到 npm 上去的话,版本号必需,且和 name 组成唯一确定的包文件。
如果想升级项目并发布,只能更改版本号。
npm 的版本号是使用 node–semver 模块解析的。
格式采用 {major}.{feature}.{patch} (主版本 . 次要版本 . 补丁版本)模式:
2.3bugs
{
"url" : "提交 issue 的地址",
"email" : "联系邮箱"
}
tips:这两个值都非必填,如果只提供 url 地址,可以写成如下格式:
"bugs" : "提交 issue 的地址"
2.4 author
当属性为 Object 时
{
"name" : "作者",
"email" : "邮箱",
"url" : "地址"
}
当属性为 String 时
"author" : "作者 <邮箱> (地址)"
2.5 files
遵循规则 :
-
README
-
CHANGES / CHANGELOG / HISTORY
-
LICENSE / LICENCE
-
NOTICE
README, CHANGES, LICENSE & NOTICE 支持任何后缀。
不管如何配置,以下文件会始终不会包含到包中:
- .git
- CVS
- .svn
- .hg
- .lock-wscript
- .wafpickle-N
- .*.swp
- .DS_Store
- ._*
- npm–debug.log
- .npmrc
- node_modules
- config.gypi
- *.orig
- package-lock.json (use shrinkwrap instead)
2.6bin
{ "bin" : { "myapp" : "./cli.js" } }
局部安装,安装时会在 ./node_modules/.bin/
下创建一个到 "./cli.js"
的软链。
全局安装,安装时会在 {prefix}/bin
下创建一个到 "./cli.js"
的软链。
执行 myapp
时实际上执行的是 "./cli.js"
。
使用方式:
{
"name": "my-program",
"version": "1.2.5",
"bin": "./path/to/program"
}
或
{
"name": "my-program",
"version": "1.2.5",
"bin" : {
"my-program" : "./path/to/program"
}
}
注意:确保 bin 文件以 #!/usr/bin/env node
开头,否则脚本将不会在 node下运行
2.7directories
{
"directories" : {
"lib" : "./lib",
"bin" : "./bin",
"man" : "./man",
"doc" : "./doc",
"example" : "./example",
"test" : "./test"
}
}
2.8repository
"repository": {
"type" : "git",
"url" : "git地址"
}
"repository": {
"type" : "svn",
"url" : "git地址"
}
GitHub, GitHub gist, Bitbucket, GitLab :
"repository": "npm/npm"
"repository": "github:user/repo"
"repository": "gist:11081aaa281"
"repository": "bitbucket:user/repo"
"repository": "gitlab:user/repo"
"repository": {
"type" : "git",
"url" : "https://github.com/facebook/react.git",
"directory": "packages/react-dom"
}
2.9 scripts
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"dev": "NODE_ENV=dev webpack-dev-server --progress --hot --host 0.0.0.0 --port 8089",
"test": "NODE_ENV=test webpack --config webpack.test.config.js --progress",
"online": "NODE_ENV=production webpack --config webpack.online.config.js --progress",
"node": "node server.js"
},
这里有一个地方需要注意,当执行npm run xxx的时候,node_modules/.bin/目录会在运行时被加入系统的PATH变量。
当我们在命令行输入:npm run build时,其实真正执行的命令是node_modules/.bin/webpack而不是webpack。
原理:
使用npm run script执行脚本的时候都会创建一个shell,然后在shell中执行指定的脚本。
这个shell会将当前项目的可执行依赖目录(node_modules/.bin)添加到环境变量path中,当执行之后之后再恢复原样。也就是说脚本命令中的依赖名会直接找到node_modules/.bin下面的对应脚本,而不需要加上路径。
使用:
npm run + 变量名称
2.10 config
{ "config" : { "port" : "8080" }
可以通过 process.env.npm_package_config_port 属性访问。也可以使用 npm config set foo:port 8001 命令改写。
webpack 的 process.env 的功能和他有点类似。
scripts 也可以直接传参,只不过是通过 npm_config_port 属性访问。
2.11 dependencies和devDependencies
执行npm i的时候会自动将两者引入的依赖下载到node_modules下。
这两者的区别就在于项目开发和运行时,如何安装所需要的依赖。我们的项目分为生产环境和开发环境,一般说的“项目上线”,就是打包开发环境下的代码发布到生产环境的这个过程。简单的说:
在开发的时候,只需要考虑哪种依赖(模块)是开发的时候需要?还是上线的时候需要?或者两者都需要,比如引入Vue时,两者都需要,我们可以使用npm i vue –save–dev,再比如引入webpack,
常用的命令 :
npm install module-name -save 自动把模块和版本号添加到dependencies部分
npm install module-name -save-dev 自动把模块和版本号添加到devdependencies部分
tips:
'-save'可以简称为:-S
'-save-dev'可以简称为:-D
2.12 peerDependencies
devDependencies和dependencies相似,如果你经常封装插件、使用一些ui组件库,自然对peerDependencies就不会陌生了。
-
问题的产生:
在项目结构中,你引入了一个父类的包(A),当你需要引入类似父类下的一个子类包(B)时,是做不到的,因为node只会在项目的node_modules文件夹中找B,并不会先找到A,再从A文件夹找B。
-
引入peerDependencies配置:
{ "peerDependencies": { "B": "1.0.0" } }
就可以解决了
{
"name": "tea-latte",
"version": "1.3.5",
"peerDependencies" : { "tea": "2.x" }
}
原文地址:https://blog.csdn.net/Skty_ywh/article/details/129695474
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_31818.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!