require和import的区别
当我们在程序中需要导入外部模块或库时,可以使用require或import命令。它们在使用上有一些不同:
1. require是Node.js中的命令,而import是ES6语法中的命令。
2. require是同步加载模块,而import是异步加载模块。
3. require是将整个模块的内容加载进来,而import只加载需要的部分或者指定的默认输出。
4. require是将模块导入到当前作用域中,可以使用变量名直接访问模块中的内容,而import需要使用指定的变量名来访问模块中的内容。
以下是使用require和import命令导入模块的例子:
使用require命令导入Node.js自带的fs模块:
```javascript
const fs = require('fs');
fs.readFile('example.txt', (err, data) => {
if (err) throw err;
console.log(data);
});
```
使用import命令导入lodash库中的map函数:
```javascript
import { map } from 'lodash';
const numbers = [1, 2, 3, 4];
const doubledNumbers = map(numbers, n => n * 2);
console.log(doubledNumbers);
```
需要注意的是,使用import命令需要在支持ES6语法的环境下运行,如现代浏览器或者使用Babel等工具转译。而require命令则可以在Node.js中直接使用。
1.遵循的模块化规范不一样
模块化规范:即为 JavaScript 提供一种模块编写、模块依赖和模块运行的方案。谁让最初的 JavaScript 是那么的裸奔呢——全局变量就是它的模块化规范。require/exports 出生在野生规范当中,什么叫做野生规范?即这些规范是 JavaScript 社区中的开发者自己草拟的规则,得到了大家的承认或者广泛的应用。比如 CommonJS、AMD、CMD 等等。import/export 则是名门正派。TC39 制定的新的 ECMAScript 版本,即 ES6(ES2015)中包含进来。
2.出现的时间不同
require/exports 相关的规范由于野生性质,在 2010 年前后出生。AMD、CMD 相对命比较短,到 2014 年基本上就摇摇欲坠了。一开始大家还比较喜欢在浏览器上采用这种异步小模块的加载方式,但并不是银弹。随着 Node.js 流行和 Browsersify 的兴起,运行时异步加载逐渐被构建时模块合并分块所替代。Wrapper 函数再也不需要了。 2014 年 Webpack 还是新玩意,现在已经是前端必备神器了。
还没有评论,来说两句吧...