前言

既然写了 JavaScript – ES Module, 也就顺便些 CommonJS 呗, 建议先看 ES Module 那篇.

参考

Youtube – Require vs Import Javascript

Youtube – Node and Express.js Fundamentals - Common.js Modules

Export 语法

逐个 export

// my-module.js
exports.myVar = "myVar";
exports.myFunction = () => {};
console.log(this.myVar); // 如果当前要用到 myVar, 可以使用 this, this 指向当前 module

这个写法不是很好看...

批量 export

const myVar = "myVar";
const myFunction = () => {}; module.exports = {
myVar,
myFunction,
};

export default

// my-module.js
const myVar = "myVar";
module.exports = myVar;

但它不能像 ES Module 那样又 export default 又 export 其它的哦.

别名 alias

module.exports = {
yourVar: myVar,
myFunction,
};

它就是个对象 key 而已.

Import 语法

// my-module.js
const myVar = "myVar";
function myFunction() {} module.exports = {
myVar,
myFunction,
}; // main.js
const { myVar, myFunction } = require("./my-module.js");
myFunction();
console.log(myVar);

别名 alias

const { yourVar: myVar, myFunction } = require("./my-module.js");

用解构对象就可以了.

与 ES Module 不同之处

CommonJS 只用于 Node.js.

CommonJS 是 runtime 的, ES Module 是 compile time 的

- 比如说, import 会置顶, 那么就会先被执行, 而 require 不会, 它会等到 runtime 运行到那一行它才去加载执行.

require 可以写在 if, function 里面, 类似 ES Module 的 dynamic import()

export 的值是 cache 来的, 它不会同步 (ES Module 会)

require 的 variable 可以修改, ES Module 则是 read-only.

还有许多的不同啦, 总之它们不兼容. 所有的兼容方案, 都是做出了一些严格要求的才能实现的. 比如不允许 if 里面有 require 等等.

JavaScript – CommonJS的更多相关文章

  1. ES6模块与CommonJS模块有什么区别?

    ES6 Module和CommonJS模块的区别: CommonJS是对模块的浅拷贝,ES6 Module是对模块的引用,即ES6 Module只存只读,不能改变其值,具体点就是指针指向不能变,类似c ...

  2. 01 Node.js简介, 安装&配置

    Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开 ...

  3. Webpack飞行手册

    前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...

  4. TypeScript 之 声明文件的结构

    https://www.tslang.cn/docs/handbook/declaration-files/library-structures.html 模块化库 一些库只能工作在模块加载器的环境下 ...

  5. Webpack按需加载一切皆模块

    前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...

  6. 研究一下javascript的模块规范(CommonJs/AMD/CMD)

    最近写react需要使用nodejs作为开发环境,需要通过npm安装一些第三方的依赖库,因此慢慢感觉到nodejs基础薄弱对我带来了一些不安全感,尤其是javascript模块这一块听到了很多概念,比 ...

  7. 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结

    是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...

  8. Javascript模块规范(CommonJS规范&&AMD规范)

    Javascript模块化编程(AMD&CommonJS) 前端模块化开发的价值:https://github.com/seajs/seajs/issues/547 模块的写法 查看 AMD规 ...

  9. 【JavaScript】JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系

    通行的Javascript模块规范共有两种:CommonJS和AMD 先说说CommonJS   CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScr ...

  10. JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系

    这几天在学习CommonJS的时候突然在StackOverflow上搜索到一个非常好的一个帖子,是关于CommonJS, AMD和RequireJS之间的关系的问答贴.我感觉写的非常好,鉴于没有找到相 ...

随机推荐

  1. UE 实现鼠标点选模型

    楔子 在孪生的场景中,点击三维对象是常用的操作.比如点击模型显示相关属性和图片,点击摄像头模型播放视频,点击楼宇展开楼层等等. 因此点选模型是属于数字孪生最必要的基础能力. 准备知识 UE蓝图介绍 本 ...

  2. 如何删除Git中缓存的用户名和密码

    昨天在上传代码的时候提示输入用户名密码,结果输错了3次就没有提示框了,就一直报错(身份验证失败),没办法提交代. 在使用git的过程中,我们也会经常遇到以前保存在git的用户名密码忘记了,或者不用了. ...

  3. oeasy教您玩转python - 012 - # 刷新时间

    ​ 刷新时间 回忆上次内容 通过搜索 我们学会 import 导入 time 了 time 是一个 module import 他可以做和时间相关的事情 time.time() 得到当前时间戳 tim ...

  4. 爆破字典:linux 敏感文件-01

    linux 中敏感文件 1.0 /apache/apache/conf/httpd.conf /apache/apache2/conf/httpd.conf /apache/php/php.ini / ...

  5. linux环境弱网测试

    linux环境弱网测试 使用以下命令可以对linux系统进行弱网设置 sudo tc qdisc add dev eth0 root netem delay 500ms       #设置500ms的 ...

  6. PyCharm设置背景主题

    PyCharm修改主题的路径: File->Settings->Appearance &Behavior->Appearance 1.  Intellij:白色 2. Dar ...

  7. 轻松搞定 Nginx 在 CentOS 和 Ubuntu 上的安装与配置

    注:这是对我以前博客进行优化后再次发布的,博客中的截图为以前的.原博客已删除. 如何安装nginx nginx是一款开源.高性能的Web和反向代理服务器,支持HTTP.HTTPS.SMTP.POP3和 ...

  8. 【Vue】可编辑表格与三级联动下拉

    需求是给员工分配岗位,设计上是一人多岗的存在... 单位 -- 部门 -- 岗位 这样的层级 功能效果: 因为员工可以在不同的单位下任职岗位,所以这个每一个岗位都是一个独立 查询单位列表是固定的,但是 ...

  9. 【Mybatis-Plus】使用QueryWrapper作为自定义SQL的条件参数

    发现同事的自定义SQL写法是这样的 连表之后使用的条件是 ${ew.customSqlSegment} @Param声明的常量: /** * wrapper 类 */ String WRAPPER = ...

  10. 【Java】SonarLint 疑难语法修正

    规范驼峰命名使用: 提示信息 Local variable and method parameter names should comply with a naming convention 代码片段 ...