目录
一、导入导出模块
- 在node中 每一个js文件都是一个模块 => 设置自定义模块功能 => 分工明确
- node中的js文件根据自身的需要定义模块功能进行拆分
- node 每个js文件 都是被一个立执行函数包裹
- 每个js文件都会自传系统参数(5个参数):
- exports 导出
- require 导入
- module模块对象
- __ filename 当前文件目录
- __ dirname 当前文件夹目录
例:
console.log("导出:", exports)
console.log("导入:", require)
console.log("模块对象:", module)
console.log("当前文件夹目录:", __dirname);
console.log("当前文件:", __filename);
1. require导入模块
使用require可以导入内置模块或自定义模块。
导入方法:require(“模块名”)或require(“模块名地址”)
例:
const fs = require("fs"); // fs 内置模块
const ds = require("modulePath"); // 引入自定义模块
注意:引入自定义模块一定要注意模块路径是否正确。
导入模块的时候会执行一次被导入的文件。
require导入输入参数时会区分自定义模块、第三方模块和内置模块。
2. export导出模块
在js文件中将某些属性用export导出,则在其他文件可以用require导入该属性并使用。
例:在test.js文件中导入train.js的属性并输出
// test.js
const m1 = require("./train");
console.log(m1)
// train.js
exports.xxx = 10;
exports.fun = (a, b) => {
return a + b;
};
在train.js中已导出xxx与fun属性,且在test.js中已导入。
输出:
可以看到,输出的是一个对象。可以通过es6的解构赋值用 “.” 将其中的某种属性单独输出:
// test.js
const m1 = require("./train");
console.log("xxx:", m1.xxx)
console.log("fun:", m1.fun)
第二种导出方法: module + "."导出
// train.js
let qwe = 999;
fun = (a, b) => {
return a + b;
};
module.exports = {
qwe,
fun,
};
总结:要在一个文件中导入其他文件的方法或属性使用require,前提是要先在被导入的文件中使用export导出该方法或属性。
注意:
-
exports.属性名导出 和 module.exports 同时导出时只生效 module.exports;
-
一个js文件只能使用一次module.exports , 后续再次使用module.exports会覆盖之前写的module.exports;
二、path模块常用方法
path 模块是node.js的内置模块,它提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块:
var path = require("path")
1. extname、parse、basename
//获取文件后缀名
console.log(path.extname("获取文件后缀名:", __filename));
// 将文件路径 序列化
console.log(path.parse("将文件路径序列化:", __filename));
// 获取路径的最后一部分
console.log(path.basename("获取路径的最后一部分:", __dirname));
2. 合并路径
path.join([path1] [,path2] [, …])
用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是" / “,Windows系统是” \ "。
// 将多个参数字符串合并成一个路径字符串
console.log(path.join(__dirname,"a","b"));
3. 查找相对路径
relative(from,to)
from:该文件路径将用作基本路径
to:该文件路径将用于查找相对路径
用于将绝对路径转为相对路径,返回从 from 到 to 的相对路径(基于当前工作目录)。
console.log(path.relative("./train/train.js", "./luoXiaobin/luo/bin.js"));
4. 查找绝对路径
path.resolve([from …], to)
将 to 参数解析为绝对路径,给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。
path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
三、npm包管理器
1. 初始化
npm => node包管理器—第三方模块
使用npm来管理node包||模块,需要先初始化 :
npm init
注意:一直回车至出现相关信息(如下图):
初始化成功之后,会自动创建一个 package.json文件;
简写:npm init -y
注意:该方法不用回车,且文件夹名不能是中文否则会报错;
2. 生产环境与开发环境
npm 官网:https://www.npmjs.com
可使用npm下载第三方包,该包可以放在两种环境中:
生产环境 : 代码开发完毕,项目已经上线了。只剩下维护,增新。dependencies:生产会被打包进去
开发环境 : 还在写代码的阶段。devDependencies:开发环境的包,不会被打包进去
下载第三方模块:-S 就是生产环境,默认是生产环境;-D 开发环境
npm install + 包名 + 环境
npm i + 包名 + 环境 // 下载速度较慢
使用镜像可以加快下载速度:
// 淘宝镜像
https://npm.taobao.org/
npm install -g cnpm
换源也可以加快下载速度:
换源:将npm下载地址转换国内的cnpm
// 淘宝源(不推荐)
npm config set registry https://registry.npm.taobao.org
// 更换源--切换回原镜像(推荐)
npm config set registry https://registry.npmjs.org
查询镜像:
npm config get registry
当下载某个包后会在同目录下生产node_modules目录,该目录专门放置下载的第三方包或模块;
package.json文件记录了配置项目信息及模块信息;
package-lock.json 锁定模块的版本;
将package.json和package-lock.json文件发给其他程序员,使用npm i 就会自动下载文件里相应的模块或包的版本。
3. 常用npm命令
// 初始化项目
npm init -y
// 下载包及安装位置(install:简写i,自动下载最新的)
npm install + 包或模块名 + 环境
// 卸载包或模块,(uninstall:简写un)
npm uninstall + 包或模块名 + 环境
npm install express --save // 安装一个包在生产环境,简写: npm i express -S
npm install express --save-dev // 安装一个包在开发环境,简写: npm i express -D
// 安装指定版本包或模块--- 版本和版本之间会有什么区别: 优化和增新或废弃api
npm i + 包名@版本号 // 例: npm i nodemon@2.0.11
// 更新版本包或模块
npm update + 包名 // 例:npm update nodemon
4. nodemon包
nodemon 可以使代码只要保存就会自动重新启动node代码,只需要启动一次就好 ,后面就自动了。即热更新。
安装:
win + R输入cmd打开命令行工具,输入:
npm i -g nodemon // -g 全局安装
启动:
在需要热更新的文件终端输入:
nodemon 文件名
完成上述步骤后,相应文件就可以进行热更新,点击保存即可自动运行代码。
5. 小知识
常用命令
cd 打开文件夹 …/ 上层
d: 跳转到d盘
c: 跳转到c盘
dir 打印当前目录的所有文件
md 创建文件夹
rd 删除文件夹