ES6模块化通过import和export实现代码复用,支持静态分析、循环依赖处理和浏览器原生支持,优于CommonJS与AMD;提供命名导出与默认导出两种方式,适用于多成员暴露或单个主要实体导出场景;支持动态导入和import.meta等高级特性,可在浏览器中通过type="module"使用,需注意兼容性与CORS问题;结合TypeScript可提升类型安全与项目可维护性。

ES6模块化通过
import
export
ES6模块化:
import
export
模块化是现代JavaScript开发的核心。ES6引入的原生模块化方案,通过
import
export
CommonJS(主要用于Node.js环境)和AMD(Asynchronous Module Definition,主要用于浏览器环境)是早期JavaScript模块化的解决方案。CommonJS采用同步加载,在浏览器端需要通过工具(如Browserify或Webpack)进行打包;AMD则采用异步加载,但语法相对复杂。
ES6模块化有以下优势:
import
export
require
module.exports
例如,考虑以下CommonJS代码:
// moduleA.js
module.exports = {
  foo: 'bar'
};
// main.js
const moduleA = require('./moduleA');
console.log(moduleA.foo);对应的ES6模块化代码:
// moduleA.js
export const foo = 'bar';
// main.js
import { foo } from './moduleA.js';
console.log(foo);ES6的语法更清晰,也更容易理解模块间的依赖关系。
export
export
命名导出: 允许你导出多个变量、函数或类。每个导出的成员都有一个名称,在导入时需要使用相同的名称。
// moduleA.js
export const PI = 3.14159;
export function add(a, b) {
  return a + b;
}
export class MyClass {
  // ...
}导入时:
// main.js
import { PI, add, MyClass } from './moduleA.js';
console.log(PI);
console.log(add(1, 2));
const obj = new MyClass();默认导出: 允许你导出一个默认值,通常是一个函数、类或对象。每个模块只能有一个默认导出。
// moduleB.js
export default function() {
  console.log('Hello, world!');
}导入时:
// main.js import hello from './moduleB.js'; // 可以使用任意名称 hello();
何时使用哪种方式?
一个模块可以同时使用命名导出和默认导出,但这通常会使代码更难理解,应尽量避免。
import
import.meta
除了基本的
import
动态导入(Dynamic Import): 使用
import()
// main.js
async function loadModule() {
  const module = await import('./myModule.js');
  module.default(); // 假设myModule.js有一个默认导出
}
loadModule();动态导入返回一个Promise,允许你异步地加载模块。这对于大型单页应用(SPA)特别有用,可以根据用户的操作动态加载不同的模块,减少初始加载时间。
import.meta
import.meta
url
// myModule.js console.log(import.meta.url); // 输出当前模块的URL
import.meta
在浏览器中使用ES6模块,需要在
<script>
type="module"
<!DOCTYPE html> <html> <head> <title>ES6 Modules</title> </head> <body> <script type="module" src="main.js"></script> </body> </html>
需要注意以下兼容性问题:
.mjs
Content-Type
application/javascript
text/javascript
虽然现代浏览器已经原生支持ES6模块,但在实际项目中,通常仍然会使用打包工具(如Webpack, Parcel, Rollup)来优化代码,例如进行代码压缩、合并、tree shaking等。
TypeScript对ES6模块化提供了良好的支持。你可以直接使用
import
export
// moduleA.ts
export interface MyInterface {
  name: string;
  age: number;
}
export function greet(person: MyInterface): string {
  return `Hello, ${person.name}!`;
}
// main.ts
import { MyInterface, greet } from './moduleA';
const person: MyInterface = {
  name: 'Alice',
  age: 30
};
console.log(greet(person));TypeScript编译器会将ES6模块代码转换为CommonJS、AMD或其他模块格式,以便在不同的环境中运行。你可以在
tsconfig.json
module
{
  "compilerOptions": {
    "module": "esnext", // 使用ES6模块
    "target": "es5", // 编译成ES5代码
    "moduleResolution": "node", // 使用Node.js模块解析规则
    "esModuleInterop": true, // 允许CommonJS模块和ES6模块互操作
    "sourceMap": true,
    "outDir": "dist"
  },
  "include": [
    "src/**/*"
  ]
}esModuleInterop
结合TypeScript和ES6模块化,可以编写出更健壮、更易于维护的JavaScript代码。
以上就是ES6模块化:Import和Export的完整指南的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                
                                
                                
                                
                                
                                
                                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号