欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Node package.json项目概述和实例讲解

程序员文章站 2022-04-06 11:59:13
1 概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。pm install命令根据这个配置文...

1 概述

每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。pm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

命令提示符执行npm install,则会根据package.json下载所有需要的包,npm install --production只下载dependencies节点的包

一个完整的package.json文件实例如下:

{
  "name": "hello world",
  "version": "0.0.1",
  "author": "张三",
  "description": "第一个node.js程序",
  "keywords": ["node.js", "javascript"],
  "repository": {
    "type": "git",
    "url": "https://path/to/url"
  },
  "license": "mit",
  "engines": {
    "node": "0.10.x"
  },
  "bugs": {
    "url": "https://path/to/bug",
    "email": "bug@example.com"
  },
  "contributors": [{
    "name": "李四",
    "email": "lisi@example.com"
  }],
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "latest",
    "mongoose": "~3.8.3",
    "handlebars-runtime": "~1.0.12",
    "express3-handlebars": "~0.5.0",
    "md5": "~1.2.0"
  },
  "devdependencies": {
    "bower": "~1.2.8",
    "grunt": "~0.4.1",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-jshint": "~0.7.2",
    "grunt-contrib-uglify": "~0.2.7",
    "grunt-contrib-clean": "~0.5.0",
    "browserify": "2.36.1",
    "grunt-browserify": "~1.3.0",
  }
}

在package.json中可以使用通配符:

"lint": "jshint *.js"
"lint": "jshint **/*.js"

*表示任意文件名,**表示任意一层子目录

2 name字段

name字段不能含有.和_,可以使用-,不能含有非url安全的字符

Node package.json项目概述和实例讲解

3 scripts字段

scripts字段指定了运行脚本命令时的npm命令缩写,比如start指定了运行npm run start时要执行的命令喎? f/ware/vc/"="" target="_blank" class="keylink">vcd4ncjxwptei0uk1xmrhtbhuy9dqdgvzdkgic3rhcnshonjlc3rhcns6zxn0b3dd/mhuyrg/ydluyqhc1hj1bjwvcd4ncjxwpm5wbb3fsb7w0ndo0qrwtndqtuc49sjozvhksaosyoe5+8rhsqlq0na00ncjrmq508mmyw1wo7f7uswjujwvcd4ncjxwcmugy2xhc3m9"brush:sql;"> $ npm run script1.js & npm run script2.js

如果是继发执行,使用&&符号:

$ npm run script1.js && npm run script2.js

更多的细节参考阮一峰的文章。

4 dependencies字段和devdependencies字段

4.1 使用

dependencies字段指定了项目运行所依赖的模块,devdependencies指定项目开发所需要的模块。

它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。

{
  "devdependencies": {
    "browserify": "~13.0.0",
    "karma-browserify": "~5.0.1"
  }
}

在单独安装某个模块时:

使用--save表示将该模块写入dependencies属性。缩写为-s 使用--save-dve表示将该模块写入devdependencies属性。缩写为-d

4.2 版本号

版本号 major.minor.patch :其中:

patch:修复bug,兼容老版本, minor:新增功能,兼容老版本 major:新的架构调整,不兼容老版本

常用的主要有以下几种:

指定版本:比如1.2.2 波浪号(~):表示安装1.2.x的最新版本 插入号(^):表示安装1.x.x的最新版本,注意如果大版本号是0,则与波浪号使用相同,例如^0.2.3只会安装0.2.x的版本,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。 latest:安装最新版本

推荐的做法:不锁版本,用 ^ 引入。

在package.json中确定版本号,只能锁定本身依赖的包,但是包自身所依赖的包没有办法锁定,解决方法就是npm shrinkwrap或者npm 5.0版本以后增加的lock功能:

如果你使用 lock 机制,则应该将 package-lock.json 提交到 repo 中。比如 vue 采取了该策略。 如果你不使用 lock 机制,则应该加入 .npmrc 文件,内容为package-lock=false ,并提交到 repo 中。比如 eslint 采取了该策略。

4.3 区别

在做项目的时候,两者可以认为没有实质的区别,但是在发布npm包的时候二者区别很大:dependencies下的模块会作为依赖,一起被下载;devdependencies下面的模块就不会自动下载了

一般来说,开发时依赖的东西需要安装在devdependencies字段中,比如转义用的babel,打包用的webpack等,如果发布后还需要使用的则要安装在dependencies,比如vue、vue-router等

5 main字段

main字段指定了加载的入口文件,require('modulename')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js

6 cinfig字段

用于添加命令行的环境变量,例如:

{
  "name" : "foo",
  "config" : { "port" : "8080" },
  "scripts" : { "start" : "node server.js" }
}

然后,在server.js脚本就可以引用config字段的值。

http
  .createserver(...)
  .listen(process.env.npm_package_config_port)

用户可以改变这个值。

$ npm config set foo:port 80

7 keywords和description字段

description是字符串,keywords是字符串数组,简单地说,这两个东东是npm搜索中的搜索条件,所以。如果你试图发布的是一个开源插件,那么这两个字段你应该重视

8 license 字段

指定的项目的许可证,它告诉他人他们是否有权利使用你的包,以及,在使用你的包的时候他们应该受到怎样的限制

Node package.json项目概述和实例讲解

9 author字段

可以是一个字符串,也可以是一个对象。如果传入对象,要包含三个属性:

name属性(必填) email属性(选填) url属性(选填)

10 engines字段

指明了该模块运行的平台,比如node的某个版本或者浏览器

{ "engines" : { "node" : ">=0.10.3 <0.12" } }

也可以指定适用的npm版本。

{ "engines" : { "npm" : "~1.0.20" } }
喎?>