• # CommonJS模块 和 ECMAScript模块


    CommonJS模块 和 ECMAScript模块

    最近我在3A平台购买了服务器。

    CommonJS模块(下面简称 cjs) 是为Node.js打包JavaScript代码的原始方法。使用 require 和 exports(module.exports的简写) 语句定义模块。 参见 nodejs cjs

    ECMAScript模块(下面简称 esm)是ecma262标准下封装的JavaScript代码重用的官方标准格式。使用 import 和export 语句定义模块。参见node esm

    -cjs只有在node.js环境使用。
    -esm在node.js和浏览器环境都可以使用

    1、commonjs

    在node.js中,每个文件都被视为一个单独的模块。模块的局部变量是私有的,只有exports出去的变量,才能被外界访问。

    默认情况下,node.js会将以下情形视为 cjs模块:

    • 扩展名为.cjs的文件;
    • 扩展名为.js的文件,且离自己最近的package.json文件包含一个顶级字段“type”,其值为“commonjs”;
    • 扩展名为.js的文件,且离自己最近的package.json文件不包含一个顶级字段“type”(建议明确指定 type值,而不是不定义);
    • 扩展名不为.mjs, .cjs, .json, .node, .js的文件,且离自己最近的package.json文件包含一个顶级字段“type”,其值为“module”,但是这些文件通过require引入。

    调用require()时,始终使用cjs模块加载器,
    require采用同步方式加载,可以在代码的任意位置使用。
    由于require()的同步特性,无法使用它加载ECMAScript模块文件。尝试这样做将抛出ERR_REQUIRE_ESM错误。请改用import()。

    要获取调用require()时将加载的确切文件名,请使用require.resolve()函数。

    1)、对于一个文件,导出的是对象的引用。如果内部的属性变化了,外部也会变化。
    2)、对于再次引入同一个文件,如果文件名一模一样,则从缓存里面取
    3)、还有种方式,要使模块多次执行代码,请导出函数并调用该函数。

    导出一个原始值

    //child.js
    var counter = 3;
    function incCounter() {
       
      counter++;
    }
    module.exports = {
       
      counter: counter,
      incCounter: incCounter,
    };
    
    //parent.js
    let child = require('./child.js')
    console.log(child.counter);  // 3
    child.incCounter();
    console.log(child.counter); // 3没变
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    导出一个对象

    //child.js
    var obj = {
       
        counter:3
    };
    function incCounter() {
       
        obj.counter++;
    }
    module.
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    剑指 Offer 30. 包含min函数的栈C++(详解)
    网页采集工具-免费网页采集工具大全
    Self -Supervised Learning
    网页大作业代码自取
    Android Compose页面跳转Demo
    Hadoop(MapReduce)
    JS DataTable中导出PDF右侧列被截断的问题解决
    面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?
    作为一名python开发者,想要兼职接单,需要学那些技术?要达到什么水准?为什么要学这些技术?
    二叉搜索树的基本操作 || TreeMap和TreeSet介绍
  • 原文地址:https://blog.csdn.net/weixin_53641036/article/details/126862491