美文网首页
关于import与require的区别

关于import与require的区别

作者: 7天苹果 | 来源:发表于2017-05-06 19:43 被阅读2321次

遵循的规范不同

  • require/exports是CommonJS的一部分
  • import/export是ES6的新规范

出现时间不同

CommonJS 作为 Node.js 的规范,一直沿用至今。由于 npm 上 CommonJS 的类库众多,以及 CommonJS 和 ES6 之间的差异,Node.js 无法直接兼容 ES6。所以现阶段 require/exports 仍然是必要且是必须的。出自 ES6 的 import/export 相对就晚了许多。被大家所熟知和使用也是 2015 年之后的事了。 这其实要感谢 babel这个神一般的项目。由于有了 babel 将ES6 Module 编译为 ES5 的 CommonJS 才能让大家可以很自在的去使用ES6而没有任何问题。


形式不同

  • require/exports 的用法只有以下三种简单的写法:
const fs = require('fs');
— — — — — — — — — — — — — — 
exports.fs = fs;
module.exports = fs;
  • 而import/export的写法就多种多样
 import fs from 'fs';
import {default as fs} from 'fs';
import * as fs from 'fs';
import {readFile} from 'fs';
import {readFile as read} from 'fs';
import fs, {readFile} from 'fs';
— — — — — — — — — — — — — — — — — — — — 
export default fs;
export const fs;
export function readFile;
export {readFile, read};
export * from 'fs';

本质上的不同

代码

运行结果:

结果

import 是在编译过程中执行,而common的require是同步。

还有import传的是值引用,require是值拷贝。

import是read-only的,比如:

//// a.js
module.exports = 0;
//// main.js
var a0 = require('./a.js');
import a1 from './a.js';
a0++; /// 1
a1++; ///报错,babel直接编辑不过

出错信息:

出错信息

实例地址:https://github.com/lipeishang/import-require-demo

相关文章

网友评论

      本文标题:关于import与require的区别

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