探索 package.json

通常存在于项目根目录中的 package.json 文件包含有关你的应用程序或模块的元数据,以及运行 npm install 时从 npm 安装的依赖项列表。

在命令提示符中初始化 package.json 类型 npm init

要使用默认值创建 package.json,请使用:

npm init --yes
# or
npm init -y

要安装包并将其保存到 package.json,请使用:

npm install {package name} --save

你还可以使用简写表示法:

 npm i -S {package name}

NPM 别名 -S--save-D--save-dev,分别保存在你的生产或开发依赖项中。

该包将出现在你的依赖项中; 如果你使用 --save-dev 而不是 --save,那么包将出现在你的 devDependencies 中。

package.json 的重要特性:

{
  "name": "module-name",
  "version": "10.3.1",
  "description": "An example module to illustrate the usage of a package.json",
  "author": "Your Name <your.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",
    "predeploy": "echo About to deploy",
    "postdeploy": "echo Deployed",
    "prepublish": "coffee --bare --compile --output lib/foo src/foo/*.coffee"
  },
  "main": "lib/foo.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/username/repo"
  },
  "bugs": {
    "url": "https://github.com/username/issues"
  },
  "keywords": [
    "example"
  ],
  "dependencies": {
    "express": "4.2.x"
  },
  "devDependencies": {
    "assume": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  },
  "peerDependencies": {
    "moment": ">2.0.0"
  },
  "preferGlobal": true,
  "private": true,
  "publishConfig": {
    "registry": "https://your-private-hosted-npm.registry.domain.com"
  },
  "subdomain": "foobar",
  "analyze": true,
  "license": "MIT",
  "files": [
    "lib/foo.js"
  ]
}

有关一些重要属性的信息:

name

包的唯一名称,应以小写字母显示。此属性是必需的,如果没有它,你的包将无法安装。

  1. 名称必须小于或等于 214 个字符。
  2. 名称不能以点或下划线开头。
  3. 新包的名称中不得包含大写字母。
version

软件包的版本由 Semantic Versioning (semver) 指定。假设版本号被写为 MAJOR.MINOR.PATCH 并且你递增:

  1. 进行不兼容的 API 更改时的 MAJOR 版本
  2. 以向后兼容的方式添加功能时的 MINOR 版本
  3. 当你进行向后兼容的错误修复时,PATCH 版本
description

项目的描述。尽量保持简洁明了。

author

这个包的作者。

bin

用于从包中公开二进制脚本的对象。该对象假定键是二进制脚本的名称,值是脚本的相对路径。

包含 CLI(命令行界面)的包使用此属性。

script

公开其他 npm 命令的对象。该对象假定键是 npm 命令,值是脚本路径。运行 npm run {command name}npm run-script {command name} 时可以执行这些脚本。

可以在没有相对路径的情况下调用包含命令行界面并在本地安装的程序包。所以不要叫 ./node-modules/.bin/mocha,你可以直接调用 mocha

main

包的主要入口点。在节点中调用 require('{module name}') 时,这将是所需的实际文件。

强烈建议要求主文件不会产生任何副作用。例如,要求主文件不应启动 HTTP 服务器或连接到数据库。相反,你应该在主脚本中创建像 exports.init = function () {...} 这样的东西。

keywords

一组描述你的包的关键字。这些将帮助人们找到你的包裹。

devDependencies

这些依赖项仅用于开发和测试模块。除非已设置 NODE_ENV=production 环境变量,否则将自动安装依赖项。如果是这种情况,你仍然可以使用 npm install --dev 这些包

peerDependencies

如果你使用此模块,则 peerDependencies 会列出你必须与此模块一起安装的模块。例如,moment-timezone 必须与 moment 一起安装,因为它是一个插件,即使它不直接 require("moment")

preferGlobal

一个属性,指示此页面更喜欢使用 npm install -g {module-name} 全局安装。包含 CLI(命令行界面)的包使用此属性。

在所有其他情况下,你不应使用此属性。

publishConfig

publishConfig 是一个对象,其配置值将用于发布模块。设置的配置值将覆盖默认的 npm 配置。

publishConfig 最常见的用途是将你的包发布到私人 npm 注册表,这样你仍然可以获得 npm 的好处,但是对于私有包。这可以通过简单地将私有 npm 的 URL 设置为注册表项的值来完成。

files

这是包含在已发布包中的所有文件的数组。可以使用文件路径或文件夹路径。将包括文件夹路径的所有内容。这只会包含要分发的正确文件,从而减少了包的总大小。此字段与 .npmignore 规则文件一起使用。

资源