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日

相关文章

  • 清除网页历史记录,屏蔽后退按钮!

    清除网页历史记录和屏蔽后退按钮可以通过一些技巧实现,下面我将为大家详细讲解这个过程。 清除网页历史记录 清除网页历史记录是为了保护隐私,避免别人查看我们的浏览历史。以下是步骤: 打开浏览器,找到浏览器菜单(通常在右上角)。 点击浏览器菜单,在下拉菜单中找到“设置”或“选项”等相关选项。 进入设置页面后,在“隐私与安全”或“清除浏览数据”等选项中找到“清除浏览…

    JavaScript 2023年6月11日
    00
  • 改版了网上的一个js操作userdata

    改版了网上的一个js操作userdata,意味着我们要掌握如何在 JavaScript 中使用 localStorage API 操作本地存储空间。下面将从以下四个方面讲解完整攻略: localStorage 的概念和用法 基础操作:setItem 和 getItem 复杂数据结构的存储和读取 注意事项 1. localStorage 的概念和用法 loca…

    JavaScript 2023年6月11日
    00
  • MvcPager分页控件 适用于Bootstrap

    MvcPager分页控件 适用于Bootstrap MvcPager是一款流行的ASP.NET MVC分页控件,它可以帮助我们快速为我们的Web应用添加分页功能。除了基本的分页功能以外,MvcPager还支持很多高级功能,比如自定义样式、 AJAX异步分页、搜索等等。本篇文章将会讲解如何使用 MvcPager 分页控件,并且针对于 Bootstrap 框架进…

    JavaScript 2023年6月11日
    00
  • javascript获取dom的下一个节点方法

    当我们需要获取一个DOM元素的下一个兄弟节点时,有以下两个方法: 方法一:使用nextSibling属性 DOM节点对象拥有一个nextSibling属性,该属性用于获取当前节点的下一个兄弟节点。需要注意的是,这个属性获取到的兄弟节点可能是文本节点、注释节点等。 // 获取 id 为 "test" 的元素的下一个兄弟节点 var test…

    JavaScript 2023年6月10日
    00
  • javascript 定时器工作原理分析

    JavaScript 定时器工作原理分析 一、概述 JavaScript 定时器是指可以在代码执行期间设定一个定时任务,在经过一段时间后执行任务的功能。常见的定时器包括 setTimeout 和 setInterval。通过定时器,我们可以实现一些周期性的或者延迟执行的逻辑。 二、setTimeout setTimeout 是 JavaScript 中最常用…

    JavaScript 2023年6月11日
    00
  • JavaScript字符串包含问题

    JavaScript字符串包含问题是指在一个字符串中,查找是否包含另一个字符串的问题。通常使用indexOf()或includes()方法来解决该问题。 使用indexOf()方法 indexOf()方法返回字符串中指定字符或字符串第一次出现的位置。返回值为-1表示未找到。可以通过以下方式使用它来判断一个字符串是否包含另一个字符串: let str = ‘h…

    JavaScript 2023年5月28日
    00
  • javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)

    下面我来为你详细讲解“javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)”的攻略。 JavaScript数组对象常用api函数小结 连接数组 concat:连接两个或多个数组,返回新的数组对象。 示例: const arr1 = [‘a’, ‘b’]; const arr2 = [‘c’]; const arr3 = [‘d’,…

    JavaScript 2023年5月27日
    00
  • 常用的js方法合集

    常用的JS方法合集 本篇攻略主要讲解常用的JS方法合集,包括字符串、数组、日期、正则表达式等方面的常用方法。 字符串方法 字符串是JS中最为常见的数据类型之一,在日常开发中经常需要对字符串进行操作。下面列出一些常用的字符串方法: string.length 用于获取字符串的长度,即包含的字符数。 javascript var str = “Hello Wor…

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