一、 NPM 概念:
npm是nodeJS package managent,nodejs的包(模块)管理器,nodejs中提供了这个很好的机制,解决的问题:当nodejs本身的不具备某个功能(如:链接数据库的mongodb),而第三方开发了这样的功能。那么nodejs可以使用npm把第三方的这个功能安装上并使用。把第三方的这个功能叫模块,也叫包。Npm的作用就是可以把第三方的包管理起来。在项目文件夹下利用npm安装模块 后,项目文件夹下就会多出文件夹node_modules和文件package.json。
以下给大家说一下,如何使用npm安装第三方的模块(包),先看一下安装后的结果
二、 node_modules文件夹:
存储着第三方模块的源代码
三、 package.json文件:
该文件保存着对该项目的描述
如:
{
"name": "day06express",
"version": "0.0.0",
"keywords": [], "author": "", "license": "ISC", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.18.2", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "ejs": "~2.5.7", "morgan": "~1.9.0", "serve-favicon": "~2.4.5" }, "devDependencies": { "express": "^4.15.5" } }
四、 确保你本机安装了nodejs
因为,npm是nodejs的包管理器,所以,需要安装nodejs。
如果没有安装nodejs,那就装吧:
1)、在地址http://nodejs.cn/download/下载nodejs的安装包,在window操作系统下下一步,下一步就行了:
2)、测试一下:按window + r 输入cmd回车,然后输入node -v
然后输入npm -v
如果都能打印出相应版本信息,那么说明没有问题。
如果提示“ 不是内部或外部命令,也不是可运行的程序或批处理文件“。那就配置环境变量(系统变量path中),这样你就可以在全局范围内去使用它了
我的路径是在c:\ProgramFiles\nodejs\node_modules\npm\bin,记得把它配置进去。
五、 全局安装第三方模块(包)
全局安装:即把该模块安装到操作系统,(配置好环境变量后)在该操作系统下的任何路径里都可以用命令的方式运行该模块
写法: 在命令行中运行以下命令:npm install 模块名 -g。
假如说你需要用gulp模块(包),那么就在命令行中运行:npm install gulp -g
六、 局部(本地)安装第三方模块(包)
1、 局部安装:
表示把该模块的源代码安装到本项目中的node_modules文件夹下,在本项目中就可以使用该模块的源代码,用require()函数引用该模块,使用该模块里的函数或者对象。
2、 局部安装的参数:
a) 无参数: npm install 模块名
npm会把互联网服务器上该模块的源代码拷贝到你的项目中的node_modules文件夹下。当你为你的模块(项目)安装一个依赖模块时,正常情况下你得先安装他们(在模块根目录下npm install module-name),然后连同版本号手动将他们添加到模块配置文件package.json中的依赖里(dependencies)或者devDepandencies。
b) --save:简写为-S
如: npm install 模块名 --save或者npm install 模块名 -S
该参数可以自动把模块名和版本号加入到package.json文件里的依赖选项(dependencies)下
dependencies: 项目依赖(即项目发布后还得依赖该模块)
c) --save-dev: 简写为-D
如: npm install 模块名 --save-dev 或者npm install 模块名 -D
该参数可以自动把模块名和版本号加入到package.json文件里的开发依赖选项(devDepandencies)下。
devDepandencies:开发依赖(即开发过程中需要该模块)
七、 Package.json文件常见属性解释:
一般来说,如果你需要把你的项目也发布成模块供别人使用时,该文件就非常重要。
a) "name": "02webpack" 项目名称
b) "version": "1.0.0" 项目版本号
c) "description": "" 项目描述
d) "keywords": [] 一个字符串数组,方便别人搜索到本模块
e) "author": "",作者,也叫码农。
f) "license": "ISC",你应该为你的模块制定一个协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。最简单的,例如你用BSD-3-Clause 或 MIT之类的协议,如下:{ "license" : "BSD-3-Clause" }
你可以在https://spdx.org/licenses/这个地址查阅协议列表 。
g) "main": "index.js" 项目入口文件
main属性指定了程序的主入口文件。意思是,如果你的模块被命名为foo,用户安装了这个模块并通过require("foo")来使用这个模块,那么require返回的内容就是main属性指定的文件中 module.exports指向的对象。
它应该指向模块根目录下的一个文件。对大对数模块而言,这个属性更多的是让模块有一个主入口文件,然而很多模块并不写这个属性。
h) "scripts": {
"start": "node./bin/www"
},
scripts属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令,是npm脚本。
如:npm start就相当于在命令行执行node ./bin/www。
注意:start命令比较特殊,直接是用npm运行,其它命令得用 npm run运行。
i) "private": true, 如果这个属性被设置为true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
j) dependencies是运行时依赖,
dependencies 下的模块,则是我们发布后还需要依赖的模块,譬如像jQuery库或者Angular框架类似的,我们在开发完后后肯定还要依赖它们,否则就运行不了。
k) devDependencies是开发时的依赖。即devDependencies 下列出的模块,是我们开发时用的,比如 我们安装 js的压缩包gulp-uglify 时,我们采用的是 “npm install –save-dev gulp-uglify ”命令安装,因为我们在发布后用不到它,而只是在我们开发才用到它。