一、NPM
- Node Package Manager: npm.inc公司的一个,关于node 的包管理工具
- npm第三方依赖
- 随着node的安装,会一起安装在客户机上
- npm -v可以查看对应的npm的版本
二、项目构建
1. 初始化
- npm规定,在项目中必须有一个package.json来定义依赖的包,类似maven中的pom.xml
- 创建空目录
- npm init -y: 会在执行命令的目录下,创建一个package.json来管理,可以创建多个
package.json
{
"name": "node_learn",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"lodash": "^4.17.21"
}
}
2. 安装第三方包
- npm install lodash
- 会在项目根路径下,创建node_moudles模块,并将第三方包放进去
- 修改对应的package.json,更新对应依赖
- 创建pachage.lock.json文件,会详细定义具体的依赖的版本,组织等信息
package.lock.json
{
"name": "node_learn",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "node_learn",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}
},
"dependencies": {
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}
}
}
3. 配置文件
项目代码
- 不需要上传node_modules模块的代码,因为体积太大
- 源代码拿到,直接 npm install 就会把配置文件中指定的第三方包下载到本地项目中
- 有时候第三方包加载出现问题,可以直接删除node_modules,然后 npm install
4. DevDepenency/ Dependency
- DevDepenency: 只会在开发时候用到,项目实际运行时候不需要
- Dependency: 开发和运行时候都需要
- npm install moment --save-dev
- 如何判断: 去npm来看就可以了
三、镜像配置
- 默认npm包是从海外服务器拉的
1. 直接修改npm参数
# npm 默认拉取地址
https://registry.npmjs.org/
# 使用淘宝镜像
npm config set registry https://registry.npm.taobao.org
# 验证是否成功
npm config get registry
2. nrm
# 下载对应的工具
npm install -g nrm
# 查看哪些镜像可用
nrm ls
# 选择哪个镜像: 会将npm的registry参数修改
nrm use taobao
# 验证是否成功
npm config get registry
四、包分类
1. 项目包
- 安装在项目中的node_modules模块下的包
- 分为开发依赖时包和开发运行依赖包
2. 全局包
- 安装到本地的node/npm/node_modules模块
- 只有工具一类的包,才需要安装全局包
# 安装的时候提供 -g
# 卸载的指令 -g
npm install lodash -g
五、自定义包
1. 创建项目
- name: 希望后面从npm官方仓库被搜索的名字,不能和npm上其他包名重复, 也是npm install时候的名字
- main: 程序的入口文件,别人需要导入时候的文件
- license: npm 遵循的协议
- keywords: npm 中搜索的时候的关键字
# 在项目文件中,生成一个package.json
npm init -y
package.json
{
"name": "erick_log",
"version": "1.0.0",
"description": "This is a demo project ",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": ["erick","nike"],
"author": "Erick Shu",
"license": "ISC"
}
2. 目录结构
cat.js
let name = 'cat';
let food = 'fish meat';
function play() {
console.log('Cat Play with Fur Ball');
}
function eat() {
console.log(`Cat eat ${food}`);
}
module.exports = {name, food, play, eat}
dog.js
let name = 'dog';
let food = 'pork meat';
function play() {
console.log('Dog Love Swiming');
}
function eat() {
console.log(`Dog eat ${food}`);
}
module.exports = {name, food, play, eat}
index.js
- 一般情况,index.js作为程序入口,只是对外导出对应的文件
- 尽可能少的涉及具体的业务逻辑
let info = 'This is introduction of this project';
let cat = require('./src/cat');
let dog = require('./src/dog');
module.exports = {
info,
cat,
dog
}
/*本项目内引用*/
/*let data = require('./index');*/
/* 别人调用本项目中的程序入口 方式一:*/
/*let data = require('../erick_log/index')*/
/* 别人调用本项目中的程序入口 方式二:*/
/* 只传递文件夹,就回根据package中的main属性,去找当前目录的,对应的那个文件*/
/*let data = require('../erick_log')*/
let index = require('./index');
console.log(index.info)
console.log(index.dog.name);
3. npm包发布
3.1 注册npm
- 需要注册对应的npm账户,然后发布项目
3.2 终端
- 必须切换到npm官方的包地址,不能使用镜像
# 1. 根据第一步注册的账号,进行登陆
npm login
# 2. 切换到项目所在目录, 发布项目
npm publish
# 3. 删除已经发布的包
# 3.1 只能发布 72h内发布的包
# 3.2 删除的包,在24h内不允许再次发布
npm unpublish 包名 --force
六、热部署
- 热部署,不用每次进行部署
- webstorm中,编辑完文件后,可以通过 ctrl+来手动触发热部署
npm install -g nodemon
# 执行对应的js
nodemon index.js
七、 npm指令
# 开始: 会在执行命令的目录下,创建一个package.json来管理
npm init -y
# 安装: 指定版本,多个同时安装
npm install lodash
npm i lodash
npm i lodash@4.17.17
npm install lodash moment
#一次性加载: node_moudle和项目package.json 不匹配时,运行会更新
#当删除node_moudle目录时候,运行就会在项目中下载对应的包
#一般node_moudle会占项目的90%的大小
npm install
npm i
# 全局操作
npm install lodash -g
npm uninstall lodash -g
# 卸载
npm uninstall lodash
npm uni lodash
# 只有开发时需要的依赖, 卸载时候的语法同上
# -D 和具体包名顺序可颠倒
npm install moment --save-dev
npm install moment -D
# 2. 检查当前项目软件哪些依赖已经过时
npm outdated
# 查看当前npm拉取地址
npm config get registry
https://registry.npmjs.org/