JS中ESModule和commonjs介绍及使用区别

JS中ESModule和CommonJS均为JS的模块化规范。ESModule是ECMAScript 6标准中新增的模块化规范,而CommonJS则是Node.js使用的模块化规范。

ESModule和CommonJS的使用区别主要体现在以下几个方面:

定义方式

ESModule使用export关键字来导出模块中的变量、函数或类,使用import关键字来导入其他模块中的变量、函数或类。

// person.js
export const name = '张三';
export function sayHello() {
  console.log('你好,我是' + name);
}

// index.js
import { name, sayHello } from './person.js';
console.log(name);
sayHello();

CommonJS则使用module.exportsexports来导出模块中的变量、函数或类,使用require来导入其他模块中的变量、函数或类。

// person.js
exports.name = '张三';
exports.sayHello = function() {
  console.log('你好,我是' + exports.name);
}

// index.js
const person = require('./person.js');
console.log(person.name);
person.sayHello();

加载方式

ESModule在代码解析时会进行静态分析,即先处理import语句,然后再执行模块中的代码。同时,ESModule支持在浏览器端动态加载模块。例如:

import('./module.js').then(module => {
  // 模块加载成功
}).catch(error => {
  // 模块加载失败
});

CommonJS则是在运行时同步加载模块。

变量绑定方式

ESModule导入的变量是只读的,在导入模块中对变量进行修改是无效的。如下示例中,对变量name重新赋值不会改变原始模块中导出的值。

// person.js
export const name = '张三';

// index.js
import { name } from './person.js';
name = '李四'; // 无效
console.log(name); // 输出: 张三

而CommonJS导入的变量是可以修改的,如下示例中,对变量name进行重新赋值会改变原始模块中导出的值。

// person.js
exports.name = '张三';

// index.js
const person = require('./person.js');
person.name = '李四'; // 有效
console.log(person.name); // 输出: 李四

综上所述,ESModule和CommonJS的使用方式和区别如下表:

ESModule CommonJS
定义方式 exportimport module.exportsexportsrequire
加载方式 静态分析、动态加载 同步加载
变量绑定方式 只读 可修改

示例1:ESModule和CommonJS的混用

// utils.js
export function add(a, b) {
  return a + b;
}

// index.js
const utils = require('./utils.js'); // 使用CommonJS加载ESModule
console.log(utils.add(1, 2));

import { add } from './utils.js'; // 使用ESModule加载ESModule
console.log(add(1, 2));

示例2:在Vue项目中使用ESModule

// App.vue
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
import { computed } from 'vue';

export default {
  setup() {
    const message = computed(() => 'Hello, Vue!');

    return {
      message
    }
  }
}
</script>

在Vue 3.x版本的项目中,可以直接使用ESModule加载Vue.js和其它依赖库,并使用setup函数构建逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中ESModule和commonjs介绍及使用区别 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 基于Cesium实现拖拽3D模型的示例代码

    下面是关于基于Cesium实现拖拽3D模型的示例代码的攻略。 1. 引入相关依赖 为了使用Cesium,我们需要先将Cesium的JavaScript和CSS文件导入到页面当中。在这个示例中,我们使用的是Cesium 1.75版本,您可以在官方网站上下载相应版本的文件并引入到HTML文件中: <!–引入Cesium的CSS和JavaScript文件-…

    JavaScript 2023年6月11日
    00
  • JS常见错误(Error)及处理方案详解

    JS常见错误(Error)及处理方案详解 JavaScript是一种弱类型语言,当我们编写JavaScript代码时,难免会出现错误。遇到这些错误时,可以通过了解常见的错误类型以及如何处理它们来提高我们的调试能力和代码质量。本文将介绍几种常见的JS错误,以及如何处理它们。 类型错误(TypeError) 当我们试图在一个不允许使用特定方法或属性的数据类型上使…

    JavaScript 2023年5月18日
    00
  • 实现高性能JavaScript之执行与加载

    为了实现高性能JavaScript,我们需要考虑两个方面:执行和加载。在执行方面,我们需要优化代码的运行速度,同时避免页面阻塞;在加载方面,我们需要优化资源加载速度,同时避免阻塞。 1. 执行优化 1.1 函数优化 函数是JavaScript程序的核心,因此优化函数的执行速度是非常重要的。以下是一些优化函数执行的方法: 尽量避免使用eval函数。 避免在循环…

    JavaScript 2023年5月27日
    00
  • Qt编写地图之实现跨平台功能

    Qt编写地图之实现跨平台功能 介绍 Qt是一个跨平台的C++图形界面应用程序开发框架,广泛应用于计算机图形学、人机交互、科学计算和数据可视化等领域。本文将介绍如何使用Qt编写一个跨平台的地图应用程序,并实现跨平台功能。 准备工作 在开始本文的实践部分之前,需要先安装Qt环境,可以从官网上下载安装包并按照提示安装,或者使用包管理器安装Qt。 实践部分 步骤一:…

    JavaScript 2023年5月28日
    00
  • JavaScript简单编程实例学习

    我们来详细讲解一下“JavaScript简单编程实例学习”的完整攻略。 一、前置知识 在开始学习JavaScript编程实例之前,我们需要掌握一些基本的前置知识,包括: HTML和CSS的基本语法 JavaScript的基本语法和数据类型 DOM操作基础知识 如果你还不掌握这些基础知识,可以先学习一下相关教程。 二、实例解析 接下来,我们将通过两个实例来详细…

    JavaScript 2023年5月18日
    00
  • Javascript中的delete介绍

    当我们在JavaScript中创建一个对象或者函数时,它们都会被存储在内存中,而使用 delete 关键字可以删除对象的某个属性或者函数。本文将详细讲解 delete 的用法,以及可能会遇到的问题。 语法 delete object.propertyName delete object[expression] delete object.functionNa…

    JavaScript 2023年6月10日
    00
  • JavaScript三种常用网页特效详解

    JavaScript三种常用网页特效详解 一、特效1:轮播 实现思路 轮播是常见的网页特效,一般是让多张图片自动轮流播放或手动切换。 实现轮播的主要思路是,利用定时器控制每隔一段时间自动切换到下一张图片,同时通过样式控制当前图片的显示与隐藏。 实现示例 以下是一个简单的轮播示例代码,展示了基本的自动轮播和手动切换的功能。 <!– HTML结构 –&…

    JavaScript 2023年5月28日
    00
  • 如何通过vscode运行调试javascript代码

    下面是如何通过VSCode运行调试JavaScript代码的完整攻略: 步骤1:安装和配置VSCode 安装VSCode:打开VSCode官网,下载并安装最新的稳定版本。如果已经安装,请保持更新到最新版本。 安装Node.js:在Node.js官网下载并安装Node.js,这将使您可以在VSCode中运行和调试JavaScript代码。 安装VSCode的J…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部