模块
模块
vino
的模块系统主要包括import
和export
两个关键字,它们分别用于导入和导出模块中的绑定(变量、函数)。这些关键字允许开发者在不同的模块之间共享和复用代码,vino
的模块系统遵循ES6 (ECMAScript 2015)
的标准。
export
export
关键字用于从一个模块中导出函数、对象、变量等,以便它们可以被其他模块通过import
语句使用。导出是模块化的核心特性之一,它允许你将代码分割成可重用的单元
导出单个绑定
使用export
关键字直接导出变量、函数。
// 导出变量
export const variableName = value;
// 导出函数
export function functionName() { ... }
导出多个绑定
如果你想要一次性导出多个绑定,你可以使用花括号{}
将它们包围起来,并在前面加上export
关键字
const name = 'vino';
function getName() {
console.log('hello vino!');
return "hello"
}
export { name, getName };
重命名导出
在导出时,你可以给导出的绑定指定一个新的名字
const name = 'vino';
export { name as vinoName };
默认导出
每个模块都可以有一个默认导出。默认导出可以是函数、对象等
// 导出默认值
const name="vino"
export default name;
注意事项
export
语句必须位于模块的顶层作用域,不能在函数内部、条件语句或循环语句中使用。- 导出的绑定如果是基本类型(string、int、float、bool),则它是只读的,不能修改它们的值,如果是引用类型(数组、对象),则可以修改值。
- 每个模块中的每个绑定只能被导出一次,但可以被导入多次。
- 默认导出与命名导出可以共存于同一个模块中。
import
import
关键字用于导入其他模块导出(export)
的绑定(变量、函数、对象等)。这使得模块化的代码可以被重用和组织得更加高效
导入默认导出
每个模块都可以有一个默认导出。导入默认导出时,你可以使用任意名称来接收它
// 在 myModule.js 中
export default function() {
console.log('这是一个默认导出');
}
// 在另一个文件中
import myFunction from './myModule.js';
myFunction(); // 输出:这是一个默认导出
导入命名导出
你可以使用花括号{}
来导入模块中的单个命名导出。
// 在 myModule.js 中
export const name = 'vino';
// 在另一个文件中
import { name } from './myModule.js';
console.log(name); // 输出:vino
导入命名导出并使用别名
在导入命名导出时,你可以给它们指定一个新的名字,叫做别名导入。
// 在 myModule.js 中
export const name = 'vino';
// 在另一个文件中
import { name as userName } from './myModule.js';
console.log(userName); // 输出:vino
导入多个命名导出
你可以在一个import
语句中导入多个具名导出。
// 在 myModule.js 中
export const name = 'vino';
export function sayHello() {
console.log('Hello!');
}
// 在另一个文件中
import { name, sayHello } from './myModule.js';
console.log(name); // 输出:vino
sayHello(); // 输出:Hello!
导入默认导出和多个命名导出
你可以在一个import
语句中同时导入默认导出和多个命名导出
// 在 myModule.js 中
export default function() {
console.log('这是默认导出');
}
export const name = 'vino';
// 在另一个文件中
import myFunction, { name } from './myModule.js';
myFunction(); // 输出:这是默认导出
console.log(name); // 输出:vino
导入全部导出到命名空间
你可以使用* as语法将模块的所有导出导入到一个命名空间中。
// 在 myModule.js 中
export const name = 'vino';
export function sayHello() {
console.log('Hello!');
}
export default function() {
console.log('这是默认导出');
}
// 在另一个文件中
import * as myModule from './myModule.js';
console.log(myModule.name); // 输出:vino
myModule.sayHello(); // 输出:Hello!
myModule.default(); //这是默认导出
注意事项
import
语句必须位于模块的顶层作用域,不能在函数内部、条件语句或循环语句中使用。- 导入的绑定如果是基本类型(string、int、float、bool),则它是只读的,不能修改它们的值,如果是引用类型(数组、对象),则可以修改值。
- 每个模块中的每个绑定只能被导出一次,但可以被导入多次。
仅执行模块代码
可以使用import "xx.js"
来执行该模块代码但并不导入任何值
//index.js文件内容
import "./test.js"
//test.js文件内容
console.log("test")
执行index.js
文件时,打印:test
模块名称规则
vino
支持3类模块:内置模块
、外部模块
、用户自定义模块
内置模块
内置模块是包含在vino
运行时中的模块,主要用来提供一些基础能力。模块名称只包含英文字母和下划线。
示例
import {HttpServer} from "http"
外部模块
外部模块是通过包管理器导入的模块。模块名称是一个不包含协议的URL地址。
示例
import index from "codeup.aliyun.com/jianvin/test/vino/index.js"
用户自定义模块
用户自定义模块是当前项目中开发者自己编写模块。模块名称是一个本地绝对路径或相对路径,一般建议使用相对路径。
示例
import test from "./vino/test.js"
注意事项
用户自定义模块导入时,如果使用相对路径,则这个路径是相对与当前导入的模块文件的路径