📅  最后修改于: 2023-12-03 15:08:32.317000             🧑  作者: Mango
在Javascript中,有不同的方式来导入一个外部模块或库,其中两种比较常用和灵活的方式是 require()
和 import
。虽然它们都可以用来引用外部模块,但它们有一些不同的特性和语法。
在Node.js环境中,require()
是用来加载外部模块的常用方式。它接受一个参数,这个参数所指的是需要加载的模块的路径名称。它返回了一个导出对象,这个对象可以被代码中的其他部分引用和使用。
下面是示例代码:
const moment = require('moment');
const sum = require('./sum');
console.log(moment().format('MMMM Do YYYY, h:mm:ss a'));
console.log(sum(1, 2));
在这个例子中,我们使用require
引入了两个模块: moment
和sum
。moment
是一个处理日期时间的流行Javascript库,而sum.js
是我们自己编写的一个简单函数。
import
是ES6中引入模块的语法。它也被设计成为一个更加强大和灵活的语法,可以更好地处理依赖关系,提供更好的模块封装和代码优化。和require()
不同,import
语句是通过命名导入的方式实现的。这意味着我们可以选择需要的导出对象和变量来引入。
下面是示例代码:
import moment from 'moment';
import { sum } from './sum';
console.log(moment().format('MMMM Do YYYY, h:mm:ss a'));
console.log(sum(1, 2));
在这个例子中,我们使用import
语句引入了与前面例子相同的两个模块: moment
和sum
。请注意,在第二行中,我们使用 {}
来命名导入了sum()
函数,这是ES6模块的语法。同时,我们通过将sum()
函数包含在花括号中来指定要导入的对象。
在某些情况下,我们可能希望同时使用require()
和import
语句来加载模块。为了做到这一点,我们可以使用esModuleInterop
选项来使用一个或多个功能模块导入。这意味着我们可以在同一文件中混合使用require()
和import
。
下面是示例代码:
import moment from 'moment';
import { sum } from './sum';
const fs = require('fs').promises;
console.log(moment().format('MMMM Do YYYY, h:mm:ss a'));
console.log(sum(1, 2));
async function readFileAsync() {
const fileContent = await fs.readFile('./file.txt', 'utf-8');
console.log(fileContent);
}
readFileAsync();
在这个例子中,我们使用了import
语句来导入了两个模块。同时,我们还使用了require()
语句来加载Node.js内置的fs
模块,这个模块允许我们读写文件。esModuleInterop
选项允许require()
返回一个与import
相同的结构,从而实现混合使用。
在Javascript中,我们可以使用require()
和import
两种方式导入外部模块。虽然它们的语法不同,但它们都具有相似的特性和功能。同时,我们可以根据需要混合使用这两种方式。