一、node包
JS模块的基本单位是单个JS文件,但复杂些的模块往往由多个子模块组成,为了便于管理和使用,把由多个子模块组成的叫做包。
组成一个包的所有模块中,需要一个入口模块,入口模块的导出对象被作为包的导出对象。入口模块在package.json中指定。
二、CommonJS规范的包
完全符合CommonJS规范的包应该包含如下这些文件:
- package.json 包描述文件
- bin 用于存放可执行的二进制文件的目录
- lib 用于存放JavaScript代码的目录
- doc 用于存放文档的目录
- test 用于存放单元测试用例的代码
NodeJS对包要求没有那么严格,只要顶层目录下有package.json,并符合基本规范即可
三、package.json
- name:包的名称,必须是唯一
- main: 指定了程序的主入口文件
- version:符合语义化版本识别规范的版本字符串
- description:包的简要说明
- keywords:关键字数据,通常用于搜索
- maintainers:维护者数组,每个元素要包含name、email、web可选字段
- contributors:贡献者数组,格式与maintainers相同。包的坐着应该是贡献者数据的第一个元素
- bugs:提交bug的地址,可以是网址或者电子邮件地址
- licenses:许可证数组,每个元素要包含type和url字段
- repositories:仓库托管地址数组,每个元素要包含type、url和path字段
- dependencies:包的依赖,一个关联数组,由包名称和版本号组成。
- devDependencies:开发依赖项,表示一个包在开发期间用到的依赖项
注意:
pacakge.json文件必须包含如下三个属性:name,version,main
如果package.json或main字段不存在,则会尝试在包的顶级目录寻找index.js作为包的接口。
四、自定义包
目录结构:
zxm@zxm-pc:~/IdeaProjects$ tree jstest/
jstest/
├── calc
│ ├── bin
│ ├── doc
│ ├── lib
│ │ ├── add.js
│ │ ├── main.js
│ │ └── sub.js
│ ├── package.json
│ ├── README.md
│ └── test
└── calctest.js
add.js
function add(a, b) {
return a + b;
}
module.exports = add;
sub.js
function sub(a, b) {
return a - b;
}
module.exports = sub;
main.js
const add = require('./add');
const sub = require('./sub');
module.exports = {
add,
sub
}
package.json
{
"name": "calc",
"main": "./lib/main.js"
}
五、使用自定义包
calctest.js
const calc = require('./calc');
console.log(calc.add(1,2));
结果:
使用node运行js代码
zxm@zxm-pc:~/IdeaProjects/jstest$ node calctest.js
3
六、npm的使用
npm是随NodeJS一起安装的包管理工具
1.查看npm版本
npm -v
2.初始化包
npm init
创建包,package.json文件是必不可少的,我们可以使用npm init生成package.json文件
npm init -y
快速创建包
生成的 package.json
如下:
{
"name": "calc",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
3.安装包
npm install
:安装package.json
指定的所有依赖npm install <package>
:本地安装,将安装包放在./node_modules
下(运行npm
命令所在的目录),如果没有node_modules
目录,会在当前执行npm
命令的目录下生成node_modules
目录,可以通过require()
来引入本地安装的包npm install <package> --save
安装到生产依赖,会把依赖包名称添加到package.json
文件dependencies
下npm install <package> --save-dev
安装到开发依赖,会把依赖包名称添加到package.json
文件devDependencies
下npm install <package>@<version>
下载指定版本的包npm install <package> -g
全局安装安装,将安装包放在 node 的安装目录的lib下的 node_modules 下npm install <package> --registry=<registry-url>
指定仓库
4.查看包安装信息
npm list -g
查看所有全部安装的包npm list <package>
查看某个包的版本号
5.卸载包
npm uninstall <package>
卸载包
6.更新包
npm update <package>
更新包
7.清空NPM本地缓存
npm cache clear
可以清空NPM本地缓存
8.执行脚本
npm run <scriptname>
执行 pacakge.json 配置的 scripts 对象,如:npm start
,npm run test
9.package.json 与 package-lock.json
当执行 npm install
的时候,node
会先从 package.json
文件中读取所有 dependencies
的信息,然后根据 dependencies 的信息与 node_modules 中的模块进行对比,没有的直接下载,node 是从 package.json 文件读取模块名称,从 package-lock.json 文件中获取版本号,然后进行下载或者更新
例如对于jquery的依赖:
package.json
"dependencies": {
"jquery": "^3.4.1"
}
package-lock.json
"dependencies": {
"jquery": {
"version": "3.4.1",
"resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.4.1.tgz",
"integrity": "sha1-cU8fjZ3eS9+lV2S6N+8hRjDYDvI="
}
}
yarn.lock
jquery@^3.4.1:
version "3.4.1"
resolved "https://registry.npm.taobao.org/jquery/download/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
integrity sha1-cU8fjZ3eS9+lV2S6N+8hRjDYDvI=
使用 npm 安装包会有 package-lock.json
package.json 的 jquery 版本^是定义向后(新)兼容依赖,如果 jquery 版本超过 3.4.1,大版本上(3)上相同,就允许下载最新的包,package.json 只能锁定大版本,即版本号的第一位,不能锁定后面的小版本。
package-lock.json
就是锁定具体版本号,使得 jquery 版本不会自动下载升级,如果要升级 package-lock.json 里面的包,npm install <package>@<version>
。
使用 yarn 安装包会有 yarn.lock
yarn.lock 与 package-lock.json 都是用来锁定版本号
10.npm install 与 npm ci
- npm ci 它代表“NPM Clean Install”(NPM 清洁安装),它用于从 package-lock.json 文件中安装软件包。
- 项目必须有 package-lock.json 或 npm-shrinkwrap.json,否则无法使用npm ci。
- 如果 package-lock.json 中的依赖项与 package.json 中的依赖项不匹配,则 npm ci 将退出并显示错误,
- 在安装软件包之前,npm ci 会删除 node_modules 目录,并从头开始安装依赖项。这有助于确保没有来自先前安装的过时依赖项。
- npm ci不会更改package.json和package-lock.json。
- npm ci 比 npm install 快两倍。
七、yarn的使用
npm 安装包是顺序进行的,而 yarn 安装包的并行的;yarn 安装有缓存,会直接从自己的缓存中拿到包。
npm install yarn -g
安装yarn
1.查看版本
npm init
yarn init
2.安装包
npm install
yarn
或 yarn install
npm install <package> --save
yarn add <package>
npm install <package> --save-dev
yarn add <package> --dev
3.移除包
npm uninstall <package>
yarn remove <package>
4.更新包
npm update <package>
yarn upgrade <package>
5.执行脚本
npm run <scriptname>
yarn run <scriptname>
八、设置镜像的地址
npm config get registry
查看当前npm源
yarn config get registry
查看当前yarn源
npm config set registry <url>
npm设置镜像地址
yarn config set registry <url>
yarn 设置镜像地址
npm config delete registry
npm 删除镜像地址
yarn config delete registry
yarn 删除镜像地址
npm install <package> --registry=<registry-url>
指定仓库
使用淘宝镜像源加速
最新的: npm config set registry https://registry.npmmirror.com
或 yarn config set registry https://registry.npmmirror.com
之前的: npm config set registry https://registry.npm.taobao.org
或 yarn config set registry https://registry.npm.taobao.org
npm 官方源:npm config set registry https://registry.npmjs.org
yarn 官方源:yarn config set registry https://registry.yarnpkg.com