node的模块:核心模块(内置模块)文件模块(自定义模块) 第三方模块(npm安装的)
npm进行包管理,node package manager
全局安装:
npm install xxx -g 全局安装
npm uninstall xxx -g 卸载全局包
npm root -g 查看全局安装路径
包的默认安装路径 /usr/local/lib/node_modules,
包的软连接:/usr/local/bin
注意:我们安装node时,配置了node和npm路径到环境变量,才可以在终端运行node和npm命令。为什么用npm全局安装的,不需要配环境变量就可运行命令?
因为npm路径已经配置到了环境变量,npm全局安装,除了会将包安装,还会创建一个软连接,就相当于快捷方式。我们终端运行命令,会去npm的软连接进行查找,根据找到的软连接在去查找 node_modules中的包,然后执行。
npm install wepy -g
安装完成后 输出:/usr/local/bin/wepy -> /usr/local/lib/node_modules/wepy-cli/bin/wepy.js
复制代码
//nrm 源管理,可切换npm源
npm install nrm -g
nrm ls 看看源列表
nrm use taobao / cnpm /npm 切换源
//http-server 本地web服务
npm install http-server -g
sudo http-server -p 80
//idoc 文档生成工具包
npm install idoc -g
复制代码
本地安装
- 安装之前,确认该项目是否有package.json文件,没有的化需要 npm init -y 快速初始化项目,生成package.json文件。
- 如果没有package.json,就会去上一层查找,找到根目录没有找到,才会认为在当前目录安装,所以一定要初始化项目。
- package.json是记录当前项目依赖的。
- 项目依赖:package.json中 dependencies 记录的。
//安装
npm install jquery --save
npm install jquert //默认安装项目依赖
//卸载
npm uninstall jquert --save
复制代码
- 开发依赖:package.json中devDependencies记录的
//安装
npm install babel --save-dev
//卸载
npm uninstall babel --save-dev
复制代码
安装全部依赖
//根据当前项目的package.json安装依赖
npm install
复制代码
npm 快捷方式命令
1.终端输入 node 1.npm.js //node执行1.npm.js
2.上一种操作比较麻烦,可以在当前项目的package.json 配置 快捷命令
// "scripts": {
// "test": "echo \"Error: no test specified\" && exit 1",
// "start":"node 1.npm.js"
// },
在终端执行,npm run start 即可
复制代码
yarn 进行包管理。
- yarn 安装,是有缓存的,所以安装速度比npm快点;
- 不能全局安装包
- 也是靠取package.json的dependencies 和devDependencies字段管理依赖
- yarn 语法 :
npm install yarn -g //将yarn全局安装
yarn init -y //初始化项目
yarn add jquery 项目依赖
yarn add less --dev 开发依赖
yarn remove jquery 卸载
yarn remove less --dev 卸载开发
yarn install 安装全部依赖
复制代码
第三方模块,靠的就是包管理器进行安装和卸载
- 不需要使用 相对路径引入,可以直接通过包名引入
- 通过包名引入查找规则:当前目录node_modules中查找,找不到会去上层目录的node_modules查找....
第三方模块使用
require('jquery')
console.log(module.paths)//查看模块的查找路径
复制代码
核心模块(内置模块)fs、path、http、util等
let a = []
util.isArray(a ) //true 验证是不是数组
let fn = ()=>{}
util.isFunction(fn) //true 验证是不是函数
util.inherits(Child,Parent) //子类继承父类,之继承公有
//inherits 实现继承采用的是es6的 Object.setprototyoeOf方法
//Object.setPrototypeOf(Child.prototype,Parent.protoyype)//没有改变Child.prototype的内存地址
//等价于Child.prototype.__proto__ = Parent.prototype
es5继承
Child.prototype = Object.create(Parent.prototype)//改变了Child.prototype的内存地址
function create(obj){
let Fn = function(){
}
Fn.protoType = obj;
return new Fn();
}
/*
new Fn()做了什么
var obj = {};
Fn.call(obj)
obj.__proto__ = Fn.prototype
return obj
*/
util.promisify(fs.readfile) 将一个方法promise化。
fs.readFile('./1.txt','utf8',function(err,data){
if(err){
console.log(err)
return;
}
console.log(data)
})
function read(url){
return new Promise((resolve,reject)=>{
fs.readFile(url,'utf8',function(err,data){
if(err){
return reject(err);
}
resolve(data)
})
})
}
//将read方法promise化,read执行返回一个promise,只有promise实例才能调用then
let read = util.promisify(fs.readfile);
read('./1.txt','utf8').then((data)=>{
console.log(data)
},err=>{
console.log(err)
})
复制代码