包 package
创建一个目录,将js模块文件放进去,依赖放进去,在写一个package.json文件到根目录下,这就是一个包;
commonjs的包结构规范:
package.json 必须得有,包的整体描述文件 | |
name 包名 | |
description 描述 | |
version 版本 | |
keywords 关键字(搜索) | |
maintainers 主要开发者 | |
contributors 参与贡献者 | |
bugs bug提交方式 | |
license 版权 | |
repositories | |
dependencies 依赖 | |
homepage 官网 | |
os | |
cpu | |
engine | |
builtin | |
directories 目录 | |
implementsscripts | |
author | |
bin | |
main | |
devDependencies | |
bin/ 可直接执行的二进制脚本文件 | |
lib/ 依赖的库 | |
doc/ api说明文档等 | |
test/ 单元测试 | |
index.js 入口文件 |
npm (node package manager)
npm init 初始化一个package.json文件 | |
npm | |
npm -v | |
npm version | |
npm search package | |
npm install/i package | |
npm install/i package -g 全局安装的包一般是作为系统的工具使用 如打包,编译 | |
npm remove/r package | |
npm install package --save 安装包并添加到自己项目的package.json的依赖中(常用) | |
npm install 文件路径 从本地安装 | |
npm install 包名 -registry=地址 从镜像源安装 | |
npm config set registry 地址 设置镜像源 | |
npm remove express --save 移除同时,也从依赖中移除 | |
npm install -g cnpm --registry=https://registry.npm.taobao.org 使用淘宝的源 | |
cnpm的使用和npm一致 |
eg. 安装一个math模块,并使用它
npm i install math --save | |
var math = require('math'); | |
console.log(math, math.add(12,34)) |
下载的包,默认位于项目根目录的 /node_modules/下
项目上传时,一般都不会上传node_modules目录,因为这个数据量很大,此时一般我们的package.json的依赖中有需要的模块,上传到服务器端后,直接执行 npm install 会自动下载所有的依赖;
npm下载的包,require()引入时,直接使用包名即可
require()引入包,查找包路径流程
node在使用模块名字来引入模块时,它会首先在当前目录的 node_modules 中寻找是否含有该模块,
如果有,则直接使用, 如果没有则去上一级目录的 node_modules 中寻找,
如有,则直接使用,如果没有则再去上一级目录寻找,直到找到为止,
直到找到磁盘的根目录,如果依然没有,则报错