npm 使用小结


本文内容基于 npm 4.0.5

概述

npm (node package manager),即 node 包管理器。这里的 node 包就是指各种 javascript 库。

npm 是随同 Node.js 一起安装的包管理工具,所以不需要独立安装。

可以通过查看版本号来检测 npm 是否已经安装成功:

npm -v

如果已经安装了npm,想要升级,只需要一条命令即可:

npm install npm -g

package.json

简介

使用 npm 来管理的 javascript 项目一般都有一个package.json文件。它定义了这个项目所依赖的各种包,以及项目的配置信息(比如名称、版本、依赖等元数据)。

package.json 中的内容就是 json 形式。

重要字段

  • name - 包名。

  • version - 包的版本号。

  • description - 包的描述。

  • homepage - 包的官网 url 。

  • author - 包的作者姓名。

  • contributors - 包的其他贡献者姓名。

  • dependencies - 指定项目运行所依赖的模块。

  • devDependencies - 指定项目开发所依赖的模块。

  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。

  • keywords - 关键字

  • bin - 用来指定各个内部命令对应的可执行文件的位置。

  • scripts - 指定了运行脚本命令的npm命令行缩写。

例:一个完整的package.json

{
  "name": "reactnotes",
  "version": "1.0.0",
  "description": "react 教程",
  "main": "./index.js",
  "dependencies": {
    "react": "^15.4.1",
    "react-dom": "^15.4.1"
  },
  "devDependencies": {
    "webpack-dev-server": "^1.16.2"
  },
  "scripts": {
    "start": "node index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/atlantis1024/ReactNotes.git"
  },
  "author": "victor",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/atlantis1024/ReactNotes/issues"
  },
  "homepage": "https://github.com/atlantis1024/ReactNotes#readme"
}

package 版本

上文介绍 package.json 文件中的 dependenciesdevDependencies 字段,这二者都是 json 数组。它们的每个 json 子对象,key 表示包名,value 表示版本。

npm 允许的版本声明方式十分多样。下面将为你介绍一二。

说明

  • version :安装一个确定的版本,遵循“大版本.次要版本.小版本”的格式规定。如:1.0.0。
  • ~version :以 ~1.0.0 来举例,表示安装1.0.x的最新版本(不低于1.0.0)。但是大版本号和次要版本号不能变。
  • ^version :以 ^1.0.0 来举例,表示安装1.x.x的最新版本(不低于1.0.0),但是大版本号不能变。
  • 1.2.x :表示安装1.2.x。
  • >、>=、<、<= :可以像数组比较一样,使用比较符来限定版本范围。
  • version1 - version2 :相当于 >=version1 <=version2.
  • range1 || range2 :版本满足range1 或 range2 两个限定条件中任意一个即可。
  • tag :一个指定 tag 对应的版本。
  • *"" (空字符串):任意版本。
  • latest :最新版本。
  • http://...file://... :你可以指定http或本地文件路径下的包作为版本。
  • git... :参考下面的“直接将 Git Url 作为依赖包版本”
  • user/repo :参考下面的“直接将 Git Url 作为依赖包版本”

例:下面的版本声明都是有效的

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}

直接将 Git Url 作为依赖包版本

Git Url形式可以如下:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

常用命令

npm 的命令很多,这里,我挑选几条 npm 中比较重要的命令来介绍。

更多详情可以参考 <u>npm 官方文档</u>

help

个人认为这是最重要的命令。对命令行的用法有问题的时候,还有什么比查看帮助信息更有用呢?

查看 npm 命令列表**

npm -h

查看所有命令使用方法

npm -l

查看某条命令详细帮助信息

如:要查看 npm install 命令的详细帮助信息

  • 查看命令的快捷帮助信息
npm install -h
  • 打开命令的帮助文档
npm help install

npm init

npm init 用于初始化一个新的package.json文件。

命令格式

npm init [-f|--force|-y|--yes]

说明

执行命令后,npm 会问你一系列问题,然后在执行命令的目录下创建一个package.json文件。

如果使用 -f / --force-y / --yes ,npm 会使用默认值为你创建 package.json 文件,不再询问任何问题。

npm install

npm install 用于安装模块。

命令格式

npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <tarball file>
npm install <tarball url>
npm install <folder>

alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--dry-run]

说明

  • npm install (with no args, in package dir)

    默认的,将 package.json 中声明的所有模块安装到当前路径下的 node_modules 目录中。这称为本地安装

    如果,加上 -g, --global 参数,npm 会将当前包安装到全局(系统目录下),这称为全局安装

  • npm install <folder>

    安装位于文件系统上某文件夹中的包。

  • npm install <tarball file>

    安装位于文件系统上的包。注意:如果你只想链接一个 dev 目录到你的 npm 根目录,使用 npm link 更容易做到这一点。

    例:

    npm install ./package.tgz
    
  • npm install <tarball url>

    获取 url,然后安装它。为了区分此选项和其他选项,参数必须以“http://”或“https://”开头。

    例:

    npm install https://github.com/indexzero/forever/tarball/v0.5.6
    
  • npm install [<@scope>/] [-S|--save|-D|--save-dev|-O|--save-optional]

    例:

    npm install sax
    

    npm install 有3个可选参数,用于保存或更新主package.json中的包版本:

    • -S, --save:包将被添加到 dependencies

    • -D, --save-dev:包将被添加到 devDependencies

    • -O, --save-optional:包将被添加到 optionalDependencies

    当使用上述任何选项将依赖保存到package.json时,有两个额外的可选标志:

    • -E, --save-exact :会在 package.json 文件指定安装模块的确切版本。
    • -B, --save-bundle : 包也将被添加到bundleDependencies
  • npm install [<@scope>/]<name>@<tag>

    安装被 tag 引用的包的版本。如果 tag 不存在于该包的注册表数据中,则失败。
    例:

    npm install sax@latest
    npm install @myorg/mypackage@latest
    
  • npm install [<@scope>/]<name>@<version>

    安装指定的包的版本。如果版本尚未发布到注册表,则失败。

    例:

    npm install sax@0.1.1
    npm install @myorg/privatepackage@1.5.0
    
  • npm install [<@scope>/]<name>@<version range>
    安装与指定版本范围相匹配的包版本。

    例:

    npm install sax@">=0.1.0 <0.2.0"
    npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
    

npm uninstall

npm uninstall 用于卸载包。

命令格式

npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]

aliases: remove, rm, r, un, unlink

说明

在全局模式下(即,在命令中附加-g--global),它将当前包上下文作为全局包卸载。

npm uninstall 有3个可选参数,用于保存或更新主 package.json 中的包版本:

  • -S, --save:包将被添加到 dependencies

  • -D, --save-dev:包将被添加到 devDependencies

  • -O, --save-optional:包将被添加到 optionalDependencies

例:

npm uninstall sax
npm uninstall sax --save
npm uninstall @myorg/privatepackage --save
npm uninstall node-tap --save-dev
npm uninstall dtrace-provider --save-optional

npm update

npm update 用于更新本地安装的模块。

命令格式

npm update [-g] [<pkg>...]

aliases: up, upgrade

说明

注:从npm@2.6.1开始,npm update 仅更新顶级包。旧版本的 npm 会递归检查所有的依赖。如果要达到旧版本的行为,请使用npm --depth 9999 update

npm config

npm config 命令用于管理配置文件。

命令格式

npm config set <key> <value> [-g|--global]
npm config get <key>
npm config delete <key>
npm config list
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]

aliases: c

说明

  • npm config set <key> <value> [-g|--global] : 设置一个配置参数。

    例:

    npm config set foo:port 80
    
  • npm config get <key> :获取一个配置参数。

    例:

    npm config get foo:port
    
  • npm config delete <key> :删除一个配置参数。

    例:

    npm config delete foo:port
    
  • npm config list :打印配置参数列表。

  • npm config edit :直接编辑配置文件。

  • npm get <key>npm config get <key> 的简写。

  • npm set <key> <value> [-g|--global]npm config set <key> <value> [-g|--global] 的简写。

npm publish

npm publish 用于发布一个包。

命令格式

npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]

Publishes '.' if no argument supplied
Sets tag 'latest' if no --tag specified

说明

将包发布到注册表,以便可以按名称安装。如果没有本地 .gitignore.npmignore 文件,则包括软件包目录中的所有文件。如果这两个过滤文件都存在时,某个文件被 .gitignore 忽略,而不被 .npmignore 忽略,则它将被包括。

npm run

如果在 package.json 文件中的 scripts 字段定义了命令,就可以使用 npm run 来执行脚本命令。

例:

假设 package.json 文件中的 scripts 字段如下定义:

"scripts": {
    "test": "mocha",
    "lint": "eslint lib bin hot scripts",
    "prepublish": "npm run test && npm run lint",
    "start": "node index.js"
}

npm run test :相当于执行 mocha 命令。它会开始执行测试框架 Mocha 。

npm run lint :相当于执行 eslint lib bin hot scripts 命令。它会开始执行 eslint 检查。

npm run prepublish :相当于执行 npm run testnpm run lint 两条命令。现在你了解如何复合命令了吧。

npm start :相当于执行 node index.js 。Node.js 启动一个服务的入口脚本。

参考

npm 官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey阅读 6,203评论 2 36
  • npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具...
    build1024阅读 7,680评论 0 8
  • 描述 npm从以下来源获取配置值,按优先级排序: 命令行标记 在命令行上放置--foo bar设置foo配置参数为...
    竹天亮阅读 43,487评论 0 8
  • 2017.3.20 - 2017.3.31 笔记索引 mongodb数据库去重 日期数组编造 同步查询代码编写ht...
    ccminn阅读 678评论 0 3