美文网首页javascript进阶
require与import区别

require与import区别

作者: waly_ | 来源:发表于2018-12-20 22:08 被阅读0次

首先主要体现在他们的用法上,

require是CommonJS的语法,它的模块是对象,导入时实际倒入一个对象,然后再根据对象去查找对应的属性。所以会可能加载一些模块内不被用到的方法或其他。

let { stat, exists, readFile } = require('fs');

// 等同于  

let _fs = require('fs');

let stat = _fs.stat;

这里涉及到一个概念,叫‘运行时加载‘,就是说,只有在代码真正运行的时候才会去加载对应需要的东西,所以不能做到编译时就把想加载的模块加载进来,即不能做到编译时静态化。

而import是属于ES6内的,es6默认使用严格模式,模块内的变量在外部是无法使用的,必须通过exports导出。

导出的方式有:

export var firstName = 'Michael';

export {firstName, lastName, year};

export function multiply(x, y) { return x * y; }; //导出函数或者类

export {
 v1 as streamV1,
 v2 as streamV2,
 v2 as streamLatestVersion
 }; //用as重命名

export模块可以位于模块中的任何位置,但是必须是在模块顶层,如果在其他作用域内,会报错。

function foo() {
     export default 'bar' // SyntaxError
}
foo()

还有默认导出

export default function () { console.log('foo'); }

与之对应的是需要import引入

import {firstName, lastName, year} from './profile';

import { lastName as surname } from './profile'; //重命名

  import * as circle from './circle'; //用星号代表所有

import命令接受一对大括号,里面指定要从其他模块导入的变量名,必须与被导入模块(profile.js)对外接口的名称相同

注意,import命令具有提升效果,会提升到整个模块的头部,首先执行。(是在编译阶段执行的)

因为import是静态执行的,不能使用表达式和变量,即在运行时才能拿到结果的语法结构

适用场景就是按需加载和条件加载

相关文章

网友评论

    本文标题:require与import区别

    本文链接:https://www.haomeiwen.com/subject/rtvukqtx.html