# node
# 设置淘宝镜像源
- 查看镜像源
npm config get registry
- 临时使用
npm --registry https://registry.npm.taobao.org install express
- 永久使用
npm config set registry https://registry.npm.taobao.org
# 恢复默认 或 npm config delete registry
npm config set registry https://registry.npmjs.org
2
3
- 使用cnpm代替npm
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 常用命令
npm help
查看 npm 帮助,简写npm -h
npm -v
查看 npm 版本npm install npm@latest --global
更新 npm 版本,简写npm i npm@latest -g
npm init
初始化 package.json 文件npm install [package]
安装包,默认安装最新版本,简写npm i [package]
npm install [package]@[version]
安装包的指定版本,版本号可以是精确的版本号,也可以是模糊的版本号,简写npm i [package]@[version]
npm install [package] --global
全局安装包,简写npm i [package] -g
npm install [package] --save
安装包并添加到 package.json 的 dependencies 中,简写npm i [package] -S
npm install [package] --save-dev
安装包并添加到 package.json 的 devDependencies 中,简写npm i [package] -D
npm install [package] --save-optional
安装包并添加到 package.json 的 optionalDependencies 中,简写npm i [package] -O
npm install [package] --no-save
安装包但不添加到 package.json 中,简写npm i [package] -X
npm uninstall [package]
卸载包,简写npm un [package]
npm update [package]
更新包,简写npm up [package]
npm update [package]@[version]
更新包到指定版本npm view [package] versions
查看包的所有版本npm view [package] version
查看包的最新版本npm view [package] dependencies
查看包的所有依赖npm view [package] repository.url
查看包的源码仓库地址npm view [package] engines
查看包的运行环境,当前依赖支持node最低版本号
# package.json 说明
{
"name": "my_package",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT",
"dependencies": {
"my_dep": "^1.0.0"
},
"devDependencies": {
"my_test_framework": "^3.1.0"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- name: 包名
- version: 版本号
- description: 包描述
- main: 入口文件
- scripts: 脚本命令
- author: 作者
- license: 许可证
- dependencies: 生产环境依赖
- devDependencies: 开发环境依赖
# 依赖包版本号说明
版本号组成说明
版本号组成:主版本号.次版本号.补丁版本号
{ "dependencies": { "vue": "2.6.12" } }
1
2
3
4
5
6如上,vue 包的版本号为 2.6.12,表示主版本号为 2,次版本号为 6,补丁版本号为 12。
- 主版本号(Major releases):当你做了不兼容的 API 修改,一般是大版本迭代
- 次版本号(Minor releases):当你做了向下兼容的功能性新增,一般是小版本迭代
- 补丁版本号(Patch releases):当你做了向下兼容的问题修正,修改一些小bug。偶数是稳定的,奇数是测试版本
- 版本号符号说明
{
"dependencies": {
"vue": "^2.6.12",
"jQuery": "~3.1.2",
"less": "*3.13.1",
"scss": "*",
"axios": "2.0.1"
}
}
2
3
4
5
6
7
8
9
10
- ^: 表示安装最新的次版本号,主版本号不变,如上表示安装 vue 2.x.x 的最新版本
- ~: 表示安装最新的补丁版本号,主版本号和次版本号不变,即安装 jQuery 3.1.x 的最新版本,
- *: 表示安装最新的版本,即安装 less、 scss的最新版本
- 空: 表示安装指定的版本,锁定版本,即安装 axios 2.0.1 版本
# resolutions
假设项目依赖于包 packageA 而 packageA 包中又依赖于 packageB包, 由于安全、功能等问题需要升级packageB包,正常是升级packageA包带动packageB包升级,但有时可能会packageA包没有升级或者不维护了,这时候就可以使用 resolutions 来升级packageB包升级。
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"packageA": "1.0.0"
},
"resolutions": {
"packageA/packageB": "1.1.1"
}
}
2
3
4
5
6
7
8
9
10
# 管理node版本
# nvm-windows
- 解压后运行安装包 nvm-setup.exe
- 安装路径不要有中文或空格
- 选择nodejs路径
- 安装完成后,打开cmd,输入 nvm -v 查看版本号,如果出现版本号,则安装成功
- 常用命令
nvm list
查看已安装的node版本nvm install 10.16.0
安装指定版本的nodenvm use 10.16.0
切换node版本nvm uninstall 10.16.0
卸载指定版本的nodenvm on
开启node版本管理nvm off
关闭node版本管理nvm proxy
设置代理nvm node_mirror
设置镜像nvm npm_mirror
设置npm镜像
# 搭建本地服务
# 准备
- 创建一个项目文件夹
server
并进入文件夹内mkdir server cd server
1
2 - 初始化
package.json
npm init -y
1 - 安装
express
npm install express -D
1
# 前端
模拟部署前端项目到服务器
安装
http-proxy-middleware
依赖(处理跨域问题)npm install http-proxy-middleware
1新建
views
文件夹,再其下面新增index.html
页面新建
viewServer.js
内容如下let express = require('express'); // http 代理中间件 let proxy = require('http-proxy-middleware'); let app = express(); // 指定静态资源文件夹地址 app.use(express.static('./views')); // api接口代理中间件 app.use('/api', proxy.createProxyMiddleware({ target: 'http://localhost:5000', changeOrigin: false, // pathRewrite: { // "^/api": "" // } })); app.listen(3000,()=>{ console.log('development server is running at http://localhost:3000'); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20修改
package.json
中scripts
运行脚本{ "scripts": { "dev": "node viewServer.js" } }
1
2
3
4
5运行
npm run dev
# 后端
模拟接口服务器返回数据
- 新建
apiServer.js
内容如下// 引入 let express = require('express'); // 创建 Express 应用 let app = express(); // 设置允许跨域访问该服务 app.all('*', function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); // 接口一 app.get("/api/getUserList", (req, res) => { let arr = [ {name:"小明"},{name:"红"}] res.send({ code: 200, data: arr }); }); // 接口二 app.post("/api/EHRData/GetTjContent", (req, res) => { res.send({ code: 200, data: { username:"小明", age:18, } }); }); // 启动一个服务器并在端口 3000 上监听连接 app.listen(5000, () => { console.log("api Interface server is running at http://localhost:5000"); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 - 修改
package.json
中scripts
运行脚本{ "scripts": { "dev": "node viewServer.js", "serve": "node apiServer.js" } }
1
2
3
4
5
6 - 运行
npm run serve
# 发布包到 npm
# 简约版
- 注册 npm 账号
- 登录 npm 账号
npm login
1 - 发布包
npm publish # 如果是名是带有@xx/xx符号这种(npm会认为要发布私包,私包需要收费),例如: @vensst/js-toolkit 使用下面命令, npm publish --access public
1
2
3 - 更新包
npm version patch npm publish
1
2 - 删除包
npm unpublish [package]@[version]
1 - 撤销发布
npm unpublish [package]@[version] --force
1 - 查看包
npm view [package]@[version]
1
# 搭建 cli 脚手架 发布到 npm 教程
# 初始化
- 新建项目
mkdir project && cd project
npm init -y
2
- 在项目文件夹下,新建
bin
文件夹,在其文件夹下新建vensst.js
文件,并写入如下代码:
#!/usr/bin/env node
console.log('hello world')
2
注意:#!/usr/bin/env node
必须放在第一行,否则会报错。指定脚本的解释程序用 node
执行 node ./bin/vensst.js
,在控制台就会打印出 hello world
。
在
package.json
文件中,加入bin
字段{ //... "bin": { "vensst": "./bin/vensst.js" }, //... }
1
2
3
4
5
6
7
许多npm包都具有一个或多个要安装到PATH中的可执行文件。package.json中提供一个字段bin,该字段是命令名到本地文件名的映射。在安装时,npm会将文件符号链接到prefix/bin以进行全局安装或./node_modules/.bin/本地安装。
- 安装第三方依赖
npm install chalk commander download-git-repo inquirer ora log-symbols figlet
commander 前往 (opens new window)
命令行工具,用于解析终端的输入命令,这样我们就能在终端输入命令然后执行代码,如 vue create appName
.option()方法来定义选项,可以接收三个参数:- 自定义标志必须:分为长短标识,中间用逗号、竖线或者空格分割;标志后面可跟必须参数或可选参数,前者用<>包含,后者用[]包含。 .option('-d,--debug') 长选项名称(--后面接一个或多个单词),使用逗号、空格或|分隔 .option('-d,--debug-bug') 标志后面可跟必须参数或可选参数,前者用<>包含,后者用[]包含。 .option('-d,--debug' [type])
- 选项描述省略不报错:在使用 --help 命令时显示标志描述 .option('-d,--debug','这是描述')
- 默认值可省略:当没有传入参数时则会使用默认值, .option('-d,--debug','这是描述','默认值')
download-git-repo 前往 (opens new window) 在 node中通过git下载(GitHub, GitLab, Bitbucket)代码
download(repository, destination, options, callback);- repository
- GitHub - github:owner/name or simply owner/name
- GitLab - gitlab:owner/name
- Bitbucket - bitbucket:owner/name 说明: owner:仓库所有人,name:名称
- repository
inquirer 前往 (opens new window) 命令行交互工具,用于命令行交互问询操作 https://blog.csdn.net/qq_26733915/article/details/80461257
ora 前往 (opens new window) 用于实现node命令环境的loading效果,并显示各种状态的图标,显示 loading 动画
chalk 前往 (opens new window) 用于修改终端命令行字体颜色
log-symbols 前往 (opens new window) 用于在打印输出的内容中加入icon更友好(显示出 √ 或 × 等的图标)
handlebars.js 前往 (opens new window) 模板引擎工具,可用于修改package.json中相关字段
child_process (node自带) 前往 (opens new window) 子进程,用于执行命令行的指令
figlet 前往 (opens new window) 字体样式
# handlebars.js 使用方式
const Handlebars = require("handlebars");
// package.json文件路径
const packagePath = `${process.cwd()}/${obj.projectName}/package.json`
// 读取 package.json 文件内容,并转换为json对象
const packageContent = fs.readFileSync(packagePath, "utf-8")
// 编译替换
const packageResult = Handlebars.compile(packageContent)({projectName: obj.projectName, version: "0.1.0"})
// 重写到本地文件
fs.writeFileSync(packagePath, packageResult);
2
3
4
5
6
7
8
9
# 使用 npm link 挂载全局进行 本地测试
# npm link 包链接地址
npm link D:\huyafei\001-GitHub\vensst-cli
2
process.exit() 指示 Node.js 以 code 的退出状态同步终止进程 参考 (opens new window)