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

yizhihongxing

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类型转换方法大全

    JavaScript类型转换是指将一个数据类型的值转换成另一种数据类型的值。在JavaScript中,类型转换是非常重要的,因为它能够帮助我们将不同的数据类型进行比较、运算和合并。 JavaScript中主要的类型转换有以下几种: 1. 字符串转换 可以通过toString()方法将一个非字符串类型的值转换为字符串类型。 let num = 42; let …

    Web开发基础 2023年3月30日
    00
  • JavaScript中import用法总结

    一、介绍 在现代JavaScript中,由于前后端的合并,前端框架和库变得更加流行。尤其是React、Vue、Angular等框架的引入,对项目的开发有非常大的帮助作用,更可以提高项目的开发效率,简化了开发流程。为了使这些框架和库能够生效,我们需要使用ES6模块加载系统。import和export是ES6中原生导入/导出模块的语法,这种语法可以让我们从其他模…

    JavaScript 2023年6月11日
    00
  • 原生JS和jQuery操作DOM对比总结

    下面是关于”原生JS和jQuery操作DOM对比总结”的完整攻略。 1. 什么是DOM DOM(Document Object Model)是一种描述文档的方法。在Web页面加载后,浏览器会将HTML文档解析为DOM树。DOM树是一个基于节点(Node)层次结构的树型结构,它定义了每个节点的父/子/兄弟关系,同时也封装了从某个节点的子节点,在Web页面上修改…

    JavaScript 2023年6月10日
    00
  • 解决JS表单验证只有第一个IF起作用的问题

    解决JS表单验证只有第一个IF起作用的问题 问题描述:在进行表单验证时经常遇到的一个问题是只有第一个IF语句能够起作用,导致多个验证条件无法生效。这个问题的根本原因是没有逐步排查错误,或者是代码逻辑不清晰。接下来我们将分步骤解决这个问题。 步骤一:优化代码结构 当我们的代码中有多个条件需要验证时,可能会将它们全部写在同一个IF语句块中,这样容易出现只有第一个…

    JavaScript 2023年6月10日
    00
  • js获取当前页面路径示例讲解

    下面是“js获取当前页面路径示例讲解”的完整攻略。 什么是页面路径? Web页面的路径是指从Web服务器到Web文档的绝对或相对路径。绝对路径是从根目录开始的完整路径,如:http://www.example.com/index.html;而相对路径则是相对于当前文件所在的路径,如:./index.html。 如何在JS中获取当前页面路径? 获取当前页面路径…

    JavaScript 2023年6月11日
    00
  • 原生JS分页展示效果(点击分页看效果)

    下面是“原生JS分页展示效果”的完整攻略。 前言 在实际项目开发中,通常都需要使用分页功能。常用的分页库有jQuery的pagination.js,但如果不想依赖jQuery,则可以使用原生JS实现分页。本篇文章将介绍如何使用原生JS实现分页展示效果。 实现步骤 第一步:创建分页HTML结构 首先,需要创建一个包含分页按钮的HTML结构。例如: <di…

    JavaScript 2023年6月11日
    00
  • 分析javascript原型及原型链

    分析 JavaScript 原型及原型链可分为以下几个步骤: 1. 什么是原型 在JavaScript中,每个对象都有一个原型对象(prototype),当你访问一个对象的属性时,如果这个对象本身不存在这个属性,那么 JavaScript 就会从原型对象中找这个属性,如果原型对象中也不存在这个属性,那么就会从原型对象的原型对象中继续寻找,直到找到为止,这就是…

    JavaScript 2023年6月10日
    00
  • javascript 数组的定义和数组的长度

    数组是JavaScript中最常用的数据结构之一,可以用来存储多个值。在JavaScript中,数组的定义和长度可以用以下方式来实现: 定义数组 定义一个空数组 javascript let arr = []; 定义一个带有数据的数组 javascript let arr = [1, 2, 3]; 可以通过 Array 构造函数创建数组 javascript…

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