import与require

本文详细对比了JavaScript中import与require两种模块加载方式的特点与应用场景。import属于ES6标准,支持静态分析;require遵循CommonJS规范,适用于运行时加载。

今天的面试觉得前面回答的还挺好的,到了import与require这里有些懵逼,老实说在使用的时候是真的没有考虑过这么多,一懵逼就乱说,可以说如果今天挂掉了,就是这里垮掉了。

首先问了我,import与require都是什么加载方式?

 什么东西?这什么玩意?加载方式,我就 记得把他import进去和require进去就好了啊。

然后,面试官看我一脸懵逼就问我说,那这两个都是怎么引入的?

我说就import和require一下。。。

面试官说:那在哪里引入呢?

我说:在页面最上方,嗯,script标签的最上方。

他说,那你说,他们是什么加载方式?

我:。。。。



整个过程其实复杂又曲折,感觉面试官是真的在很有耐心的在引导我回答,可是,真是全是我没有听过的名词,我真的不知道。

然后回答的都是错的,感觉我面试要挂了。哎!!!


好了,日记就不写了。现在好好看看这他妈的究竟是什么:

加载方式 规范 命令  特点
运行时加载 CommonJS/AMD require 社区方案,提供了服务器/浏览器的模块加载方案。非语言层面的标准。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
编译时加载 ESMAScript6+ import 语言规格层面支持模块功能。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。
require是在运行时加载,所以,他可以一边运行,一遍请求和加载,所以,他可以写在文件的中间,而import是在编译时加载,所以,他写在页面的开头,样他就在整个页面加载之前,他需要的东西全部import进来,否则会编译不通过的。


那么问题来了 ,他们究竟是怎样的引入过程,这样就很容易理解了

以下是我的个人理解,今天面试完,面试官问我你还有什么想问的时候,其实我是想要问这个的,那个我怕他觉得我没救了就问了其他的问题:(如果是错误的,后期会修改的):

import是页面的最上方的加载,是一种静态的加载,那么他会把父级的模块引入到该文件中,像是src的样子,而require是时一种动态的加载,他是在使用的时候在去请求引入的资源,他是动态的,像是href的样子,是作为一种中间的链接,并不写入文件中。


关于import和require的来源相信大家都很清晰,require是commonJS规范的语法,而nodeJS是基于commonJS的,所以在node中使用的是require。ES6是生于node之后,在ES6中import和export是一对的。


在有的后期框架中,require和import是可以混合用的。


至于如何使用,看:

import和require的用法

他说的真的很清晰。


秋招真的很累,现在手上有一个offer,可是真的不想去。并非自持清高而是我觉得我并不差。



### TypeScript 中 `require` 和 `import` 的区别及使用场景 在 TypeScript 中,模块导入可以通过两种主要方式实现:`require` 和 `import`。这两种方式在语法、功能和适用场景上存在显著差异。 #### 1. `require` 的特点用法 `require` 是一种基于 CommonJS 模块系统的导入方式,主要用于 Node.js 环境中的模块管理[^1]。它通过动态加载模块的方式,返回一个模块对象。以下是其基本用法: ```typescript const module = require('module-name'); ``` - **动态加载**:`require` 支持在运行时动态加载模块。 - **兼容性**:适用于旧版 JavaScript 和 Node.js 环境,但在现代浏览器环境中不被支持。 - **局限性**:无法直接用于 ES6 模块系统,且不具备静态分析能力,这可能影响代码优化和工具支持。 #### 2. `import` 的特点用法 `import` 是 ES6 标准中引入的模块导入语法,推荐在现代 TypeScript 和 JavaScript 开发中使用[^2]。它的语法更加直观,支持静态分析,从而提升性能和工具链的支持。以下是常见的 `import` 用法: - **默认导入**: ```typescript import myModule from 'module-name'; ``` - **命名导入**: ```typescript import { myFunction, myVar } from 'module-name'; ``` - **通配符导入**: ```typescript import * as myModule from 'module-name'; ``` - **侧效应用导入**(仅执行模块副作用而不导入任何内容): ```typescript import 'module-name'; ``` #### 3. `export =` 和 `import = require()` 的特殊用法 `export =` 和 `import = require()` 是 TypeScript 提供的一种特殊语法,用于 CommonJS 和 AMD 等旧模块系统的兼容性[^2]。例如: ```typescript // module.ts export = { myVar: 123, myFunction() { console.log('Hello, world!'); } }; // main.ts import module = require('./module'); console.log(module.myVar); // 输出 123 module.myFunction(); // 输出 "Hello, world!" ``` 这种语法允许导出任意类型的实体(类、函数、对象等),但并不符合 ES6 模块的标准。 #### 4. 区别总结 | 特性 | `require` | `import` | |--------------------|-------------------------------|------------------------------| | 模块系统 | CommonJS | ES6 | | 静态分析支持 | 不支持 | 支持 | | 动态加载支持 | 支持 | 不支持 | | 使用场景 | Node.js 环境 | 现代前端开发 | | 工具链优化 | 较差 | 更优 | #### 5. 推荐使用场景 - **`require`**:适用于需要旧版 Node.js 模块或 CommonJS 系统兼容的场景。 - **`import`**:推荐在现代 TypeScript 和 JavaScript 开发中使用,特别是在需要静态分析、代码分割和树摇动优化的情况下。 ```typescript // 示例:使用 import 导入模块 import { myFunction } from './module'; myFunction(); // 调用模块中的函数 ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值