npm search
来在命令行中查询,但是初次查询过程中要在本地建立索引,等待的时间巨漫长,还是不介绍的为好。在 win 10 下的 powershell 中运行命令,如果出现提示无法加载文件,因为在此系统上禁止运行脚本
的提示,那么需要使用超级管理员打开 powershell ,然后运行set-ExecutionPolicy RemoteSigned
,接着会提示是否要更改执行策略
,输入 y。操作完成之后,即可执行 npm 命令。
node_modules
目录下安装coffee-script包。npm init
快速创建一个package.json文件,我们新建一个目录,然后在命令执行npm init
,则会要求你填入若干信息:npm install express --save
。命令执行完成之后,再看package.json,发现多了一个配置属性:npm install packageName --save
来将其安装到本地的同时在package.json中同时添加依赖声明。当你代码开发完成时,要把项目往服务器上部署,那么这时候package.json中的依赖声明都已经写好了,这时候,你直接在项目目录运行npm install
,就可以自动将声明中的文件全部下载安装到项目目录的node_modules
子目录下。
我们在来稍微留意一下,我们配置的这个express的版本号,咦,^
是个什么鬼?讲这个东东,还要从Semantic Versioning这个概念讲起,它将版本号分为三段:4
,小版本号是14
,补丁版本号是0
。啰嗦了这么多,那么^
呢,它告诉你使用从4.14.0
到5.0.0
(不包括5.0.0)之间的最新版本,也就是说它选择的版本号x的取值范围:4.14.0<=x<5.0.0
。
除了^
,还有一个版本号标识符~
也很常用,假设我们将这里express的版本号设置为~4.14.0
,那么它表示从4.14.0
到4.15.0
(不包括4.15.0)之间的最新版本,也就是说它选择的版本号x的取值范围:4.14.0<=x<4.15.0
。
另外还有一些版本号的特殊标志符,由于不常用,有需要的可以参考https://docs.npmjs.com/cli/v6/using-npm/semver 。 一般情况下,我们通过将依赖安装到项目目录下,但是有时候我们需要做全局安装,这种全局安装的包一般都是些命令行程序,这些命令行程序安装到全局后就可以保证我们通过 cmd.exe(或者bash) 中调用这些程序了。下面我们演示一下如何全局安装express-generator:C:\Users\[用户名]\AppData\Roaming\npm\node_modules
目录下,其实这个安装目录是可以自指定的,老是往系统盘安装会让人抓狂,下面要讲到这个问题。
安装完 express-generator ,我们在命令行中新建一个目录mkdir first-express
,然后进入这个目录运行 express
,如果发现生成了一堆express项目文件,恭喜你成功了!cnpm install
来代替npm install
,又可以愉快的玩耍了。cnpm install lodash -g
后,你会惊奇的发现报错了:node_modules
子文件夹中,其次我们这里将node安装到了系统盘C:\Program Files (x86)
目录下,最后写入这个目录需要超级管理员权限。
本来就讨厌往系统盘写入数据文件,这下子非要改掉它这个默认设置不可了。我们命令设置完成后,记得将 d:\npm 添加到环境变量 PATH 中,否则在终端中无法找到全局安装的命令。
npm install -g package
命令安装的包就会被放置到 ${prefix}/node_modules 下。同时使用命令NODE_PATH
环境变量,指向我们刚才设置的目录 D:\npm
。npm list -g
命令,运行完成后会打印一个目录树,但是如果安装的包比较多的话,在命令行中会打印不全,所以可以采用重定向的方式将打印结果输出到硬盘,例如npm list -g > d:\package.txt
。 如果不加-g
参数就是打印当前目录下 node_modules
文件夹下的包结构。node_modules
下对应的文件夹删除即可,如果是全局安装的话,那还是使用命令进行卸载吧,比如卸载我们上面安装的 express-generator : npm uninstall express-generator -g
。同样这里的 -g
是说卸载全局安装的 express-generator 包。需要注意的yarn需要 node 版本大于4.0.0。
yarn init
对应 npm init
来初始化项目, yarn install
对应 npm install
来读取配置文件安装依赖包。yarn install
安装过程中,yarn 将下载下来的包都缓存到了本地(这个缓存路径在windows下默认为C:\Users\[user]\AppData\Local\Yarn\cache),下次如果换个项目再安装相同包,并且版本号也跟之前安装的一样的话,它就直接从缓存中读取出来。同时,yarn 在安装包的时候是并行的,而 npm 在安装包时串行的,必须第一个包安装完成之后才能安装第二个包。所以综上两点,yarn 安装包的速度要比 npm 快。npm save [pakcage] --save
来将依赖包安装到当前项目下,同时将配置写入 package.json 文件,在 yarn 中 使用 yarn add [package]
即可,如果你要想全局安装包可以用 yarn global add [package]
(之前我们通过命令4.2.3设置过全局包安装的路径,yarn 也会读取这个设置)。此外 yarn global 还有一些很有用的命令,大家可以参见这里。yarn add [package]
后,他还会在当前目录下生成或者修改一个 yarn.lock 文件。例如我们运行 yarn add express
后就会发现文件 yarn.lock 中内容如下:yarn install
安装的各个依赖就和初始化的老兄用的一样了,这样就避免了团队中各个开发者通过 npm install 安装到本地的包的版本号不一致而导致的各种难以排查的问题了。如果之前通过 命令 4.2.3 命令设置过第三方源,那么这个设置的优先级会大于通过 yarn 命令设置的优先级。特别是 npm 命令和 yarn 命令设置的源地址不同的时候,你会发现明明 yarn 切换到了淘宝源,运行 yarn add 后源地址却不是淘宝源的。其实通过 yarn 命令切换源后,它会在 ~/.yarnrc 中写入新的源的配置,同样使用 config 命令切换源后,它会写入 ~/.npmrc 中。运行 yarn add 时,它会先读取 ~/.npmrc 中的配置,再读取 ~/.yarnrc 的配置。所以解决问题的思路就是要么删除 ~/.npmrc 中关于 registry 的配置,要么将其改成跟 yarn 中配置的源地址一致。
d:/yarn/global/bin
添加到环境变量,这样全局安装的命令行程序才能被从终端上找得到。yarn add [email protected]
, 这样 yarn.lock 和 package.json 都会被更新,且 package.json 中的包版本号会被写死为 x.y.z
,而不是我们常见的 ^a.b.c
格式。yarn upgrade-interactive --latest
, 需要手动选择升级的依赖包,按空格键选择,a 键切换所有,i 键反选选择。这种方式如果升级的包的版本号中主版本号没有变,则只会更改 yarn.lock,不会更改 package.json。比如说当前安装版本是 1.1.0,升级到版本是 1.20,则用这个命令后,package.json 不改变;当前安装版本为 1.1.0,升级到版本是 2.0.0,则用这个命令后,package.json 和 yarn.lock 都会更改。npm adduser
命令来将注册的账号绑定到本地机器上,运行完改命令后会让你输入 npmjs 的注册账号和密码。
要想在 npmjs 上发布自己的包,首先要做的是明确你发布的包名在这个网站上有没有存在,在4.1小节,我们上来就介绍了怎么通过包名搜索npmjs上的包。不过,这里提供一个简单暴力的方法,就是直接在浏览器里输入:npmjs.com/package/packageName , 将packName替换成你所想创建的包名,然后回车,如果打开的网页中有404映入你的眼帘,恭喜你,这个包名没有被占用。
我这里演示一下,我开发包slogger的过程,首先在浏览器地址栏里输入:npmjs.com/package/slogger ,很不幸,slogger 这个包名已经被占用了。于是乎我输入 npmjs.com/package/node-slogger ,咦没有被占用(我们应该用发展的眼光的看待问题)。接着新建一个目录node-slogger,在命令行中进入这个目录,运行 npm init
:git repository
位置填写了一个 git 地址,这就意味着当前的代码要托管在github上。接着我们编写代码,然后将代码push到github,接着给预发布的代码打一个tag,最后运行npm publish
(在此之前需要运行 npm login
完成在 npmjs 网站上的授权),打完收工,现在我们看 https://npmjs.com/package/node-slogger ,包已经可以访问了!registry=https://registry.npmmirror.com/
。当然通过 npm config set registry https://registry.npmjs.org/
也能实现相当的效果。https://git-domain/project-path.git
或者 [email protected]:project-path.git
这种格式。不过推荐使用后者,这样可以借助于 git 仓库自带的部署密钥的功能,更好的控制权限。npm install [email protected]:yunnysunny/myecho.git#v0.1.0
, 即可完成安装(注意井号后面是 tag 名称)。一般来说,如果是公司的开发人员的话,对于要安装的自定义依赖包是有项目权限的,这时候不用更改任何 ssh 配置,就能完成对其的下载。但是如果要在服务器上运行这个安装命令的话,大家肯定不会把某一位同事的开发用的 git 密钥文件放置在服务器上,这时候就需要在服务器上配置部署密钥了,修改 ~/.ssh/config ,添加类似如下配置即可: