模块

模块

vino的模块系统主要包括importexport两个关键字,它们分别用于导入和导出模块中的绑定(变量、函数)。这些关键字允许开发者在不同的模块之间共享和复用代码,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;

注意事项

  1. export语句必须位于模块的顶层作用域,不能在函数内部、条件语句或循环语句中使用。
  2. 导出的绑定如果是基本类型(string、int、float、bool),则它是只读的,不能修改它们的值,如果是引用类型(数组、对象),则可以修改值。
  3. 每个模块中的每个绑定只能被导出一次,但可以被导入多次。
  4. 默认导出与命名导出可以共存于同一个模块中。

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(); //这是默认导出

注意事项

  1. import语句必须位于模块的顶层作用域,不能在函数内部、条件语句或循环语句中使用。
  2. 导入的绑定如果是基本类型(string、int、float、bool),则它是只读的,不能修改它们的值,如果是引用类型(数组、对象),则可以修改值。
  3. 每个模块中的每个绑定只能被导出一次,但可以被导入多次。

仅执行模块代码

可以使用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"

注意事项

用户自定义模块导入时,如果使用相对路径,则这个路径是相对与当前导入的模块文件的路径

更新时间 9/19/2024, 12:09:33 PM