同意用户从NPM服务器下载别人编写的第二方包到地面利用,包内会自带该公文

package.json是npm
package的布局文件,存款和储蓄当前项目相关的信息。若是下载npm中的包,包内会自带该公文。

后日给大家大快朵颐一下 如何行使NPM?CNPM又是怎样?

实际性质

{
  "name" : "underscore",  //当前包(项目)的名字
  "description" : "JavaScript's functional programming helper library.",
  "homepage" : "http://documentcloud.github.com/underscore/",
  "keywords" : ["util", "functional", "server", "client", "browser"],
  "author" : "Jeremy Ashkenas",
  "contributors" : [],
  "dependencies" : [],//生产依赖
  "devDependencies”:[],//开发依赖
  "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"},
  "scripts": {
    "build": "node build.js"
  }
  "main" : "underscore.js",   //当前项目(包)的入口文件,该文件的导出对象作为该模块的导出对象 
  "version" : "1.1.6"
}

main:the main entry point
for the libary; when someone runs require(<library name>), require
resolves this call to require(<package.json:main>).

dependencies :used to list all the dependencies of your project that
are available on npm. When someone installs your project
through npm, all the dependencies listed will be installed as well.
Additionally, if someone runs npm install in the root directory of
your project, it will install all the dependencies to ./node_modules.

devDependencies :these are dependencies not required for normal
operation, but required/recommended if you want to patch or modify the
project. If you built your unit tests using a testing framework, for
example, it would be appropriate to put the testing framework you used
in your devDependencies field. To install a
project’s devDependencies, simply pass the --dev option when you
use npm install.

scripts:每一个属性,对应1段脚本。每当实践npm
run xxx 时就会活动新建1个 Shell,在那几个 Shell
里面试行钦赐的本子命令
。npm
run新建的Shell会将当前目录的node_modules/.bin子目录append到PATH变量,执行落成后,再回复原样。所以当前目录的node_modules/.bin子目录里面包车型地铁有所脚本,都能够一贯用脚本名调用,在向来十分小局安装时也无需加上路线。所以只假如Shell能够运作的指令,都能够写在 npm 脚本里面。

  传入参数:npm run <command> [–
<args>] ,所以在scripts中要用 —
双中线分隔传给npm命令的参数和传给脚本的参数。node server.js --port=8888转换成
 npm run server -- --port=8888

执行多个脚本:并行执行多个命令使用&标记,顺序实施(前贰个任务成功才试行下2个职责)使用&&符号。

一.背景介绍

大局安装vs本地安装:

Global packages are
for anything that you need to access from the shell. By contrast local
packages are for using within your apps.

npm install xxx -g :属于全局安装,将包安装在C:\Users\admin\AppData\Roaming\npm\node_modules目录下,同时在node_modules平级目录生成批管理文件,这样可以在任何地方执行xxx的CIL``命令。否则需要cd到项目的cmd命令所在目录再执行/双引号包含可执行命令的全路径,很繁琐。全局安装时的包不能够透过 require() 来引进。

图片 1

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\node_modules\gulp\bin\gulp.js" %*
) ELSE (
  @SETLOCAL                 //变量本地化
  @SET PATHEXT=%PATHEXT:;.JS;=;%    //删除js后缀的默认执行文件,不直接执行gulp.js
  node  "%~dp0\node_modules\gulp\bin\gulp.js" %*    //在命令行输入gulp时,实际上调用的是这条命令:用node解释器调用批处理文件所在目录下的js文件
)

npm install xxx –save-dev :属于本地安装,将包安装在项目根目录下的node_modules目录下的.bin目录下,生成对应的cmd命令,在项目根目录下可以直接运行。可以通过 require() 来引入本地安装的模块。

 图片 2 

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\._gulp@3.9.1@gulp\bin\gulp.js" %*        //"执行其他目录下的文件"  "node执行的js文件地址"   %*其他任意变量
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\..\._gulp@3.9.1@gulp\bin\gulp.js" %*  //%~dp0代表的是bat文件所在的文件目录,不可变;指向当前项目依赖的gulp模块的js
)

如果不安装全局包,则在pro目录下是不能执行对应的命令行命令,必须cd到.bin目录下,或者通过npm link命令或通过package.json的scripts字段设置:

"scripts" : {
  "build" : "webpack ./entry.js bundle.js",
  "deploy": "export NODE_ENV=production && `npm bin`/webpack --config webpack.config.production.js && npm start",
}

然后运行``npm run build``命令。

什么是npm?

require()查找文件的逐1

当require一个文本模块时,先从当下实行文书平级的的node_modules目录中搜寻;然后寻觅上一流的node_modules目录;依次迭代,直到根目录下的node_modules目录。若是还一向不查找到内定模块的话,就会去NODE_PATH``注册的路径中查找

require相对路径的文本,查找时不用去遍历每三个node_modules目录,其速度最快。

为何要全局安装和地面安装一遍?

本地安装能够让每一种品种依赖独立的包,不受全局包的影响,保障区别版本的包里面的彼此重视,能够经过require()使用引进的模块。是npm的暗中认可安装形式。

大局安装并不依赖引进的模块。它会在’C:\Users\admin\AppData\Roaming\npm’生成对应的cmd文件,保险在任何地方都足以因而命令行试行该程序,不用cd到花色目录实行。如全局安装gulp是为着在别的地方都得以实践gulp任务,本地安装gulp则是为着调用gulp插件的功效。

NPM是连同NodeJS一齐安装的包处理工科具,能减轻NodeJS代码布置上的累累题目,常见的使用处境有以下三种:

npm 常用命令

安装模块

npm install      //安装package.json中定义的所有依赖的包
npm install [<@scope>/]<name>@<version>    //安装指定版本的包,如不指定版本,默认安装最新的包
alias: npm i
options: 
-S|--save    //保存版本信息到package.json文件的dep字段中
-D|--save-dev    //保存版本信息到package.json文件的devDep字段中

npm install --production  # 添加了production参数后将仅仅安装package.json中dependencies 里面的包,不会安装devDependencies 里的

卸载模块

npm uninstall <pkg>
aliases: remove, rm, r, un, unlink
options:
-S|--save    //删除package.json中dev字段对应的信息
-D|--save-dev //删除package.json中devDep字段对应的信息

履新模块

npm outdated [<pkg>]    //列出所有过时的包
npm update [-g] [<pkg>...]    //更新指定到包到最新版本;如果未指定,则更新所有包,包括全局和本地
aliases: up, upgrade
options:同上

其他命令

npm config get prefix              //获取全局模块安装路径;
where node                           //获取node所在路径;
npm <command> -h              //查看该命令的所有使用帮助信息;
npm view package@2.3.1 [version|dependencies] //查看远程包内的package.json信息
npm config ls –l                    //查看npm内置的配置参数
npm install 或者 npm install –save-dev   //自动将所在目录的package.json中的模块安装到node-modules文件夹下,不用一个一个安装模块。
npm ls xxx [–depth=0]                 //查看本地安装的模块版本信息,只看当前目录,不遍历子目录。注意:子模块的devdependency依赖包不会被安装,只安装dep包。

图片 3

允许用户从NPM服务器下载外人编写的第一方包到本地利用。

cnpm

因为npm是从海外服务器下载,日常出现非凡,可以接纳Tmall团队成本的镜像cnpm,cnpm跟npm用法一样。

设置命令:npm install cnpm -g --registry=https://registry.npm.taobao.org

create-react-app安装模块慢,可以设置永久使用cnpm:

$:npm config set registry https://registry.npm.taobao.org

$:npm config set registry**http://registry.npmjs.org
  #合法地址**

使用nrm管理registry地址:

1.安装nrm:npm install -g nrm

2.注册registry地址:

  nrm add npm
http://registry.npmjs.org

  nrm add cnpm
https://registry.npm.taobao.org

3.切换registry地址

  nrm use npm/cnmp

同意用户从NPM服务器下载并安装外人编写的指令行程序到本地利用。

依赖包版本管理 

包版本号为X.Y.Z2个人,代表主版本号、次版本号和补丁版本号。当代码退换时,按以下规则更新版本号:
主版本号:有不相配的API 修改时; 
次版本号:有向下包容的成效性新扩张时;
补丁版本号:做了向下包容的bug纠正时。

借助于包版本号管理(固定写死须要手动更新):
~相称方今的小本子重视包,举例~一.二.三会合作全体1.二.x的包,然则不包蕴一.三.0。
^匹配最新的大版本依赖包,举例^一.贰.三会协作全体壹.x.x的包,然则不包罗二.0.0。

同意用户将团结编写的包或指令行程序上传出NPM服务器供外人选用。

package-lock.json

npm ⑤.0新增加特性。package-lock.json is automatically generated for any
operations
where npm modifies either the node_modules tree, or
package.json. It describes the exact tree that was generated, such that
subsequent installs are able to generate identical trees, regardless of
intermediate dependency
updates.即使package.json中运用了~或^钦点版本,在重复npm
i时会安装可用的新星版本,同时package-lock.json也会变动。可是只要在此之前的本子固定,package-lock.json也会牢固。

It stores an exact, versioned dependency(including nested dependencies)
tree rather than using starred versioning like package.json itself (e.g.
1.0.*). This means you can guarantee the dependencies for other
developers or prod releases, etc. It also has a mechanism to lock the
tree but generally will regenerate if package.json changes.

This is intended to lock down your full dependency tree. Let’s say
typescript v2.4.1 requires widget ~v壹.0.0. When you npm install it grabs
widget v壹.0.0. Later on your fellow developer (or CI build) does an npm
install and gets typescript v二.四.一 but widget has been updated to widget
v一.0.一. Now your node module are out of sync. This is what
package-lock.json prevents.(调整嵌套重视包的本子)

不经意项目支付进程中稍微重视已经产生的翻新而锁定当前项目全数依赖包的版本号,防止后来者新拉项目时因重新安装的借助包版本不相同而产出bug。(同事甲:为啥本身的管理器上是通常的?!) 

由于新版的nodejs已经济同盟并了npm,所以后面npm也一并安装好了。一样能够透过输入 “npm
-v” 
来测试是还是不是中标安装。命令如下,出现版本提醒表示安装成功:

图片 4

npm的规则

同意用户从NPM服务器下载别人编写的第1方包到地面使用。

同意用户从NPM服务器下载并设置别人编写的命令行程序到地点使用。

同意用户将团结编写的包或指令行程序上传出NPM服务器供外人选取。

鉴于新版的nodejs已经济合营并了npm,所以此前npm也一并设置好了。一样能够因而输入
“npm -v” 来测试是还是不是成功安装

什么是cnpm?

因为npm安装插件是从国外服务器下载,受网络影响大,或然出现非凡,假诺npm的服务器在神州就好了,所以大家愿意分享的Taobao团队干了那事。来自官方网址:“那是2个完全
npmjs.org 镜像,你能够用此替代官方版本(只读),同步频率目前为 拾分钟三遍以确认保障尽量与官方服务协同。”

二.文化剖析

NPM常用命令

1、npm install moduleNames:安装Node模块

安装落成后会发生1个node_modules目录,其目录下正是设置的次第node模块。

node的装置分为全局情势和本土格局。

一般情况下会以地方情势运作,包会被设置到和你的应用程序代码的本地node_modules目录下。

在大局情势下,Node包会被安装到Node的安装目录下的node_modules下。

全局安装命令为$npm install -g moduleName。

得知使用$npm set global=true来设虞诩装情势,$npm get
global能够查阅当前使用的装置格局。

示例:

npm install express

默许会安装express的摩登版本,也得以经过在末端加版本号的艺术安装钦赐版本,如npm
install express@三.0.6

npm install name -g

将包安装到全局景况中

可是代码中,间接通过require()的主意是平素不章程调用全局安装的包的。全局的设置是供命令行使用的,就接近全局安装了vmarket后,就足以在指令行中央直机关接运转vm命令

npm install name –save

设置的同时,将音信写入package.json中项目路径中假诺有package.json文件时,直接利用npm
install方法就可以遵照dependencies配置安装具备的借助包,那样代码提交到github时,就不要交付node_modules那几个文件夹了。

npm root:查看当前包的安装路线

npm root -g:查看全局的包的设置路线

npm -v:查看npm安装的本子

npm list –depth=0:查看全部高等的npm moudles

npm list –depth=0 -global:查看全部全局安装的模块

为什么要保留至PACKAGE.JSON?

因为node插件包相对来讲万分巨大,所以不投入版本管理,将计划消息写入package.json并将其加入版本管理,其余开辟者对应下载就能够(命令提示符试行npm
install,则会依照package.json下载全体须要的包)。

行使npm卸载插件:npm uninstall < name > [-g] [–save-dev]
PS:不要平昔删除本地插件包

应用npm更新插件:npm update < name > [-g] [–save-dev] 

履新任何插件:npm update [–save-dev] 

查看npm帮助:npm help 

翻开当前目录已安装插件:npm list 

PS:npm安装插件进程:从http://registry.npmjs.org下载对应的插件包(该网址服务器位于外国,所以平常下载缓慢或出现非常),消除办法便是cnpm

CNPM介绍:

法定网站:http://npm.taobao.org

安装:命令提醒符推行npm install cnpm -g
–registry=https://registry.npm.taobao.org

小心:安装完后最佳查看其版本号cnpm
-v或关闭命令提醒符重新打开,安装完直接利用有一点都不小可能会油不过生错误 

PS:cnpm跟npm用法完全壹致,只是在实践命令时将npm改为cnpm。

PACKAGE.JSON 属性表达:

name – 包名。

version – 包的版本号。

description – 包的讲述。

homepage – 包的官方网站 url 。

author – 包的笔者姓名。

contributors – 包的别样进献者姓名。

dependencies – 信赖包列表。假诺依据包没有设置,npm 会自动将借助包安装在
node_module 目录下。

repository – 包代码存放的地方的连串,能够是 git 或 svn,git 可在 Github
上。

main – main
字段是二个模块ID,它是三个指向您程序的机重要项目目。正是说,如果你包的名字叫
express,然后用户设置它,然后require(“express”)。keywords – 关键字

三.常见难点

何以设置npm?

4.缓和方案

1.前去nodejs官方网址下载nodejs,https://nodejs.org/en/
,提议下载稳固版的,下载后无脑安装就可以。安装收尾之后,在cmd中输入node
-v查看是还是不是业已安装成功,借使有版本号显示,则象征安装成功!!!

5.编码实战

6.扩充思量

cnpm有哪些难点?

1.cnpm 的库房只是 npm 商旅的3个正片,它不承担 publish 职业,所以您用
cnpm publish 命令会实行停业的

2.不仅是 publish 会推行停业,别的的急需登记用户(npm adduser)、也许修改
package 状态等一声令下都无法儿用 cnpm

柒.参考文献

npm的局地常用命令

八.更加多切磋

Q壹:bower和npm的异同点?

npm是node js的包管理器,用来下载安装node
js的第3方工具包,也足以用来公布你自个儿开支的工具包。bower是3个前端库管理的工具,管理某些js库,比方说jQuery,bootstrap等

Q2:怎么样查看npm配置?

npm config list //查看基本配置 

npm config list -l //查看全部配置

npm本地安装与全局安装有如何分别?

npm install grunt // 当地安装,则是将模块下载到当前下令行所在目录。 

npm install -g grunt//全局安装,模块将被下载安装到【全局目录】中;

npm怎样赢得全局安装的暗中认可目录?

npm config get prefix

npm怎样设置全局安装的默许目录?

npm config set prefix “directory”

Q三:全局安装和本地安装的分别?

大局安装格局是键入命令:npm install gulp -g 或 npm install gulp
–global,当中参数-g的意思是象征安装到全局意况之中,包安装在Node安装目录下的node_modules文件夹中,一般在
\Users\用户名\AppData\Roaming\ 目录下,能够利用npm root
-g查看全局安装目录。

大局安装后方可供命令行(command
line)使用,用户能够在命令行中央直属机关接运转该零件包支持的下令,如下图全局安装gulp后的cmd文件

地面安装情势是键入命令:npm install gulp 或 npm install gulp
–save-dev等,个中参数–save-dev的意思是表示把你的安装包信息写入package.json文件的devDependencies字段中,包安装在钦点项目标node_modules文件夹下。

本地安装后方可直接通过require()的不二秘技引入项目中node_modules目录下的模块,如下示例,本地安装后直接在gulpfile.js中require(‘gulp’)。

Q四:为何实行了大局安装还要举办本地安装

在js实例代码中,默许下node.js会在NODE_PATH和脚下js所在项目下的node_modules文件夹下去搜索模块,由此,假设只是大局安装,无法直接通过require()的主意去引用模块,需求手动化解包路线的配置难点,当然你也得以复制全局安装的node_modules文件夹到项目下,还有办法能够采取将境遇变量的NODE_PATH设置为C:\Program
Files\nodejs。

贰.对于包的更新不佳管理,可能您供给为每一个包重新命名,如gulp@三.八.1、gulp@3.九.壹…,为了差别不一样品类采纳钦定的包,保障模块之间的互相信赖,差别每种类别经常运作。

相关文章