ES6模块化与工程化、export导出、import导入、CJS模块化、模块对象( 三 )


id
模块的识别符,通常是带有绝对路径的模块文件名
模块的文件名,带有绝对路径
返回一个布尔值,表示模块是否已经完成加载
返回一个对象,表示调用该模块的模块
返回一个数组,表示该模块要用到的其他模块
表示模块对外输出的值
导出
为了方便,Node为每个模块提供一个变量,指向. 。使用.={}或者.XXXX=""来导出 。这等同在每个模块头部,有一行这样的命令:
let exports = module.exports;
导入
函数是提供的内置函数,用于加载指定路径的模块或者是指定名称的模块 。将加载的模块进行返回,使用如下:
返回一个对象
let path = require('fs');
测试导出和导入:
在src下创建.js和.js文件,.js用来测试导出,.js用来测试导入 。
.js文件内容如下:
// 导出module.exports = {firstName: 'Michael',lastName: 'vicky'};
.js文件内容如下:
// 导入const { firstName, lastName } = require('./testExports');console.log(firstName, lastName);
执行node src/.js命令,输出结果 。
node src/testRequire.js
差异
验证导出的是值的拷贝:
//testCommonJS.jslet firstname = 'ren';let lastname = 'terry';setTimeout(() => {firstname = 'zhao';}, 2000);module.exports = {firstname: firstname,lastname: lastname// 对象属性的简写方式/* firstname,lastname */};//useCommonJS.jslet { firstname, lastname } = require('./testCommonJS.js');console.log(firstname, lastname);setTimeout(() => {console.log(firstname, lastname);}, 4000)
node src/useCommonJS.js ren terryren terry
验证ES6导出的是值引用:
//testES6.jslet firstname = 'ren';let lastname = 'terry';setTimeout(() => {firstname = 'zhao';}, 2000);export { firstname, lastname };//useES6.jsimport { firstname, lastname } from './testES6.js'console.log(firstname, lastname);setTimeout(() => {console.log(firstname, lastname);}, 4000);
node src/useES6.jsren terryzhao terry
拓展:(授课不做要求) path模块
path 模块提供了一些工具函数,用于处理文件与目录的路径,使用如下方法引用:
var path = (‘path’);
path.() 该方法返回一个参数路径的最后一部分
path.() 该方法返回一个 path 的目录名
path.() 该方法返回 path 的扩展名,即从 path 的最后一部分中的最后一个 .(句号)字符到字符串结束 。
path.() 该方法会判定 path 是否为一个绝对路径 。
path.join() 该方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径
path.() 该方法会规范化给定的 path,并解析 '..' 和 '.' 片段
path. 该属性提供平台特定的路径分隔符
模块
模块提供了一些实用函数,用于解析与格式化 URL 查询字符串 。使用如下方法引用
var= ('');
.(obj[, sep[, eq]]) 将对象转换为查询字符串
obj 要序列化成 URL 查询字符串的对象 。
sep 用于界定查询字符串中的键值对的子字符串 。默认为 '&' 。
eq 用于界定查询字符串中的键与值的子字符串 。默认为 '=' 。