Nodejs | package.json

作者: 重学前端MDN | 来源:发表于2017-12-03 19:54 被阅读160次
image.png

package.json是用来做什么的

package.json的主要功能有两个:

  1. 用来保存工程元数据
  2. 用来描述工程依赖项

npm,node都要用到package.json:

  1. node在调用require的时候去查找模块,会按照一个次序去查找,package.json是查找中的一个环节。详见[require()源码解读]
    (http://www.ruanyifeng.com/blog/2015/05/require.html)
image.png
  1. npm用的就比较多,其中的"dependencies"字段就是本模块的依赖的模块清单。每次npm update的时候,npm会自动的把依赖的模块也下载下来。当npm install本模块的时候,会把这里提到的模块都一起下载下来。通过package.json,可以很好的管理好模块的依赖关系。

package.json的字段

从nodejs官网下载了一个完整的package.json示例

{

  "name": "module-name",

  "version": "10.3.1",

  "description": "An example module to illustrate the usage of a package.json",

  "author": "Your Name <you.name@example.org>",

  "contributors": [

    {

      "name": "Foo Bar",

      "email": "foo.bar@example.com"

    }

  ],

  "bin": {

      "module-name": "./bin/module-name"

    },

  "scripts": {

    "test": "vows --spec --isolate",

    "start": "node index.js",

    "prepublish": "coffee --bare --compile --output lib/foo src/foo/*.coffee"

  },

  "main": "lib/foo.js",

  "repository": {

    "type": "git",

    "url": "https://github.com/nodejitsu/browsenpm.org"

  },

  "bugs": {

    "url": "https://github.com/nodejitsu/browsenpm.org/issues"

  },

  "keywords": [

    "nodejitsu",

    "example",

    "browsenpm"

  ],

  "dependencies": {

    "primus": "*",

    "async": "~0.8.0",

    "express": "4.2.x",

    "winston": "git://github.com/flatiron/winston#master",

    "bigpipe": "bigpipe/pagelet",

    "plates": "https://github.com/flatiron/plates/tarball/master"

  },

  "devDependencies": {

    "vows": "^0.7.0",

    "assume": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",

    "pre-commit": "*"

  },

  "preferGlobal": true,

  "private": true,

  "publishConfig": {

    "registry": "https://your-private-hosted-npm.registry.nodejitsu.com"

  },

  "license": "MIT"

}

name(必填字段)

npm包的名称,值必须为小写

version(必填字段)####

工程的版本号。
版本号分为三部分组成:主版本号、次版本号、修号。

  • 主版本号: 当做了不兼容的API修改。
  • 次版本号: 当做了向下兼容的功能性新增。
  • 修订号: 当做了向下兼容的问题修正。
  • 先行版本及版本编译信息可以加到“主版本号、次版本号、修订号”的后面,作为延伸。
表达式 版本范围 说明
1.2.1 1.2.1 匹配指定版本,这里是匹配1.2.1
^1.0.0 >=1.0.0 且 <2.0.0 ^表示与指定的版本兼容,左边第一个非0字段不可变,后面的可变,即1.x.x但不得到2.0.0

description

一段字符串,用来描述这个npm模块的作用,通过npm search的时候会用到。

keywords

一个由字符串组成的数组,也有助于别人通过npm search的时候快速找到你的包。

homepage

这个项目的主页URL。 注意:这里和url属性不是一个东西,如果你填了url属性,npm的注册工具会认为你把项目发布到别的地方了,就不会去npm官方仓库去找。

main

main字段规定了程序的主入口文件。如果你的模块命名为foo,用户安装后,就会通过require("foo")来引用该模块,返回的内容就是你的模块的 module.exports指向的对象。

这是一个相对于你的模块文件夹的模块ID,对于大多数的模块,有个主脚本就足够了。

bin

很多模块有一个或多个可执行文件需要配置到PATH路径下。npm就是通过这个特性安装,使得npm可执行。

要用这个功能,给package.json中的bin字段一个命令名到文件位置的map。初始化的时候npm会将他链接到prefix/bin(全局初始化)或者./node_modules/.bin/(本地初始化)。

例如:一个myapp模块可能是这样:

{ "bin" : { "myapp" : "./cli.js" } }
所以,当你安装myapp,npm会从cli.js文件创建一个到/usr/local/bin/myapp路径下。

如果你只有一个可执行文件,并且名字和包名一样。那么你可以只用一个字符串,比如:

{ "name": "my-program"
, "version": "1.2.5"
, "bin": "./path/to/program" }

和下面是一样的效果:

, "version": "1.2.5"
, "bin" : { "my-program" : "./path/to/program" } }

man

用来给Linux下的man命令查找文档地址,是个单一文件或者文件数组。 如果是单一文件,安装完成后,他就是man + <pkgname>的结果,和此文件名无关,例如:

{ "name" : "foo"
, "version" : "1.2.3"
, "description" : "A packaged foo fooer for fooing foos"
, "main" : "foo.js"
, "man" : "./man/doc.1"
}

通过man foo命令会得到 ./man/doc.1 文件的内容。
如果man文件名称不是以模块名称开头的,安装的时候会给加上模块名称前缀。因此,下面这段配置:

{ "name" : "foo"
, "version" : "1.2.3"
, "description" : "A packaged foo fooer for fooing foos"
, "main" : "foo.js"
, "man" : [ "./man/foo.1", "./man/bar.1" ]

会创建一些文件来作为man foo和man foo-bar命令的结果。
man文件必须以数字结尾,或者如果被压缩了,以.gz结尾。数字表示文件将被安装到man的哪个部分。

{ "name" : "foo"
, "version" : "1.2.3"
, "description" : "A packaged foo fooer for fooing foos"
, "main" : "foo.js"
, "man" : [ "./man/foo.1", "./man/foo.2" ]
}

会创建 man foo 和 man 2 foo 两条命令。

scripts

script可以用来保存一些脚本。这些脚本在执行npm run {command name}或者npm run-script {command name}时就会运行。如果需要运行包内部的命令,直接使用命令名称就可以,而不必在敲入命令的相对路径。

dependencies

dependencies属性是一个对象,配置模块依赖的模块列表,key是模块名称,value是版本范围,版本范围是一个字符,可以被一个或多个空格分割。

dependencies也可以被指定为一个git地址或者一个压缩包地址。

devDependencies

如果别人只想使用你的模块,而不需要开发和测试所需要的依赖的时候,这种情况下,可以将开发测试依赖的包,写到devDependencies中。

license

许可证。虽然在国内,许可证不是很受人重视。但既然我们用了开源软件,就要遵守开源的游戏规则。该用什么许可就用什么许可。大多数情况下都是MIT许可。

image.png

相关文章

  • Nodejs | package.json

    package.json是用来做什么的 package.json的主要功能有两个: 用来保存工程元数据 用来描述工...

  • Nodejs - package.json

    在Node.js中,模块是一个库或框架,也是一个Node.js项目。Node.js项目遵循模块化的架构,当我们创建...

  • nodejs面试题

    什么是nodejs 用到了哪些插件 package.json 配置理解 npm和cnpm

  • 六步搭建ES6语法环境

    1、新建package.json 2、全局安装nodeman nodeman作用:监控 NodeJS 源代码的任何...

  • 初始化项目

    生成项目描述文件package.json 安装依赖 nodejs的模块机制 //es5//lib.jsmodule...

  • ionic 常用命令和打包运行项目 2022-03-02

    1.首先安装 nodejs. 下载VSCode 官方下载 查看当前项目 package.json node-...

  • 使用nodejs连接mongodb数据库

    一个简单的nodejs连接mongodb示例,来自 mongodb官方示例 1. 创建package.json 首...

  • gulp 入门

    Gulp 入门 安装 安装nodejs 全局安装 gulp: 在 package.json 同级目录下创建一个名为...

  • nodejs写接口

    在项目根目录下:“npm init” 初始化nodejs项目,生成package.json文件 npm insta...

  • gulp 实现 js、css,img 合并和压缩

    安装nodejs; 新建package.json文件; 全局安装gulp;全局安装gulp目的是为了通过她执行gu...

网友评论

    本文标题:Nodejs | package.json

    本文链接:https://www.haomeiwen.com/subject/icxzbxtx.html