JavaScript:require 和 import


require 和 import 是 JavaScript 中用于模块导入的不同语法,它们遵循不同的模块规范

require()

起源:

require() 出现在 CommonJS 规范中,这是 Node.js 环境最早采用的模块化方案,也适用于其他遵循 CommonJS 的环境。

语法:

同步加载模块,通常与 module.exports 或 exports 一起使用。

使用场景:

Node.js 中,通过 require(moduleName) 来加载模块,返回模块导出的对象或值。

加载时机:

运行时加载,即在执行到 require 语句时才加载模块并执行模块代码。

示例

const myModule = require('./myModule.js');

import

起源

import 关键字来源于 ECMAScript 6(ES6/ES2015)的模块规范,是现代浏览器和越来越多的JavaScript环境(包括Node.js v14及以上版本开启实验性支持,v16及以上版本稳定支持)原生支持的模块导入方式。

语法

静态加载模块,可以导入特定的命名导出,也可以导入默认导出。

使用场景

在支持ES6模块的环境中,
通过 import { member } from ‘modulePath’ import defaultExport from ‘modulePath’ 导入模块。

加载时机

编译时加载,即在编译阶段就能识别模块间的依赖关系,有利于静态分析和优化。

异步加载

import() 表达式可以用于动态导入,返回一个 Promise,用于异步加载模块。

示例

// 导入默认导出
import myModule from './myModule.js';

// 导入命名导出
import { myFunction, myVariable } from './myModule.js';

// 动态导入
import('./myModule.js').then((myModule) => {
  // 使用myModule
});

注意:
在JavaScript的ES6模块导入语句中,两种写法:

//省略扩展名
import server from "../utils/server";
//包含扩展名
import server from "../utils/server.js";

上面两种写法,在大多数情况下,效果是相同的,因为现代打包工具(如Webpack、Rollup、Parcel等)会解析路径并查找对应的模块文件。默认情况下,它们会假设 .js、.mjs 或 .jsx 扩展名。

然而,如果你的项目配置或所使用的构建工具启用了模块解析的某些特定模式(比如Node.js的ESM模块导入默认会查找.js扩展名),那么省略扩展名也是可行的。在某些框架或环境中,还可以导入其他类型的模块,如.ts(TypeScript)、.vue(Vue单文件组件)等,这时就需要指定扩展名以正确解析模块。

总的来说,在现代前端开发环境中,通常推荐省略.js扩展名以简化代码,但在某些情况下,尤其是需要导入非默认扩展名的模块时,必须显式写出扩展名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

待煎的前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值