2022-12-08:模块导出、导入

1、导出

module.exports:模块对外的接口。(CommonJS模块规范)——require方法引入加载此模块
export default:为模块指定默认输出。(ES6模块规范)
exports:指向module.exports。(CommonJS模块规范)

2、引入

import (ES6模块规范)
require(CommonJS模块规范)

3、module的语法

CommonJS模块就是对象,所以需要查找对象属性。
eg:let { stat, exists, readfile } = require('fs');相当于加载整体的模块,后读取模块对象中的部分方法。
ES6是通过export输出指定代码,再通过import命令输入。
eg:import { stat, exists, readFile } from 'fs';只加载对应需要使用的方法。

export:
// 写法一
export var m = 1;
// 写法二
var m = 1;
export {m};
// 写法三
var n = 1;
export {n as m};
=====================
// 报错
function f() {}
export f;
// 正确
export function f() {};
// 正确
function f() {}
export {f};

import有提升作用;import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。
import整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。
eg:import * as circle from './circle'

4、CommonJS

module变量(一对象)代表当前模块,它的exports属性是对外的接口。
require方法相当于加载模块。模块可以多次加载,但是只会在第一次加载时运行一次。
目录的加载规则:require发现指向一目录后,会查看该目录下的package.json文件,然后加载main字段指定的入口文件,若package.json文件无main字段,或没有package.json文件,则会加载该目录下的index.js or index.node文件。

5、ES6

使用 export(规定对外的接口) 和 import 来导出、导入模块。使用export default命令,为模块指定默认输出。
因为export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。

// 正确
export var a = 1;

// 正确
var a = 1;
export default a;

// 错误
export default var a = 1;

require动态加载,import静态加载。但es2020引入import()函数,支持动态加载。import()返回一个 Promise 对象。
动态加载:
require:同步
import():异步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容