common.js 模块化规范

  app.js 文件:
// require 在代码执行阶段才会调用引入文件,编译(预解析)时不会执行,所以下面会报错
// console.log(dep); ReferenceError: dep is not defined
const dep = require('./dep'); // require 加载的是一个对象(即 module.exports 属性, 不是exports), const定义的变量不会预解析
console.log(dep); // { count: 1 }
  dep.js 文件:

var count = 0;
count = 1;
exports.count = count; // 默认 exports 和 module.exports 指向同一个对象,使用 exports 和 module.exports 没有区别
// require/exports 输出的是值的拷贝。这里输出的是1,不是变量count, 所以后面的count变化不会影响当前的输出
// require/exports 针对基础数据类型是值的拷贝,导出复杂数据类型时浅拷贝该对象 exports = {a:300}; // 如果将 exports 指向了其他对象,exports 改变不会改变模块输出值
count = 2;
// 当前模块的输出值是module.exports指向的对象, 不是exports指向的对象
 
 
 
ES6 模块化规范
  index.js 文件:
// 第1种导出方式
export let address = "cz";
export let obj = { b:2}; // import/export输出的是值的引用
address = "河北省沧州市" // 当前文件执行完后,才会输出值,输出的 address = "河北省沧州市"
上面等价于:
let address = "cz";
export {address} // 第2种导出方式
let name = "nodejs";
export default {name} // 这种导出的语法,一个js文件只能写1次

  app.js 文件:
// import {address, obj } from "./index" // 第 1 种导出方式,引入数据
// import index from "./index" // 第 2 种导出方式,引入数据 // 2种导出方式混合引入
import index, {address, obj} from "./index" // import 命令是编译(预解析)阶段执行的,所以在import之前使用导入的变量也可以访问到 // 不能对 import 引入的变量重新赋值/定义
// address = "河北省保定市" // SyntaxError: src/app.js: "address" is read-only
console.log(index.name, index.age, address, obj); // nodejs 14 河北省沧州市 { b: 2 }

require 与 import 的区别

  1. 属于不同的模块规范 require/exports -> CommonJS ; import/export -> ES6
  2. 加载模块时机不同: require -> 运行时直接加载模块 ; import -> 编译时加载模块
  3. require 可以写在代码的任意位置, import 只能写在文件的最顶端且不可在条件语句或者函数作用域中使用
  4. require/exports输出的是一个值的拷贝; import/export 输出的是值得引用,不能对引入模块重新赋值/定义
  5. 是否采用严格模式: commonjs 导出的模块默认不使用严格模式, es6 默认调用严格模式
    exports.fun = ()=>{
    mistypedVaraible = 17; //没有调用严格模式,不会报错
    }; export default var fun=()=>{
    mistypedVaraible = 17; //报错,mistypedVaraible is not defined
    };
  6. import(modulePath)  表达式加载模块并返回一个 promise
    import('/modules/my-module.js') //动态导入
    .then((module) => {
    // Do something with the module.
    });

require 与 import的更多相关文章

  1. 转:彻底搞清楚javascript中的require、import和export

    原文地址:彻底搞清楚javascript中的require.import和export   为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Ja ...

  2. 008_Node中的require和import

    一.js的对象的解构赋值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuri ...

  3. NodeJS中的require和import

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

  4. vue 更新了vue-cli到最新版本后引发的问题: require和import、vue-loader的问题

    "vue-loader": "^12.1.0", "vue-loader": "^12.1.0", "vue- ...

  5. javascript中的require、import和export模块文件

    CommonJS 方式 文件输出如math.js: math.add = function(a,b){ return a+b; }exports.math = math; 文件引入: math = r ...

  6. JS 中的require 和 import 区别整理

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

  7. Node中没搞明白require和import,你会被坑的很惨

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

  8. require和import的使用

    一.前言 ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引 ...

  9. require与import

    require 和 import,都是为了JS模块化使用.最近项目中,因为多人协同开发,出现了一个项目中同时使用了require 和 import 引入依赖的情况.正常情况下,一个项目中最好是对引入方 ...

  10. Node中导入模块require和import??

    转自:https://blog.csdn.net/wxl1555/article/details/80852326 S6标准发布后,module成为标准,标准的使用是以export指令导出接口,以im ...

随机推荐

  1. hbulider 运行微信开发者工具 Enable IDE Service (y/N) 

    问题:hbulider 运行微信开发者工具 出现如下页面,没有输入y的交互界面  解决办法:先安装微信开发者工具,然后打开微信开发者工具 再次运行:

  2. k8s探针详解

    一.探针类型 Kubernetes(k8s)中的探针是一种健康检查机制,用于监测Pod内容器的运行状况.主要包括以下三种类型的探针: 1.存活探针(Liveness Probe) 2.就绪探针(Rea ...

  3. Java面试——VUE2&VUE3概览

    一.VUE2.0 1.对于MVVM的理解 MVVM 是 Model-View-ViewModel 的缩写. Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑: View 代表U ...

  4. Kubernetes security context capability

    注:以下内容基于经验主义,不一定对. Linux capability Linux 中,root 作为特权用户,具有执行所有应用的能力.而普通用户只能执行普通应用.如果普通用户需要执行特权应用,需要进 ...

  5. 文心一言 VS 讯飞星火 VS chatgpt (183)-- 算法导论13.4 7题

    七.用go语言,假设用 RB-INSERT 将一个结点 x 插入一棵红黑树,紧接着又用 RB-DELETE 将它从树中删除.结果的红黑树与初始的红黑树是否一样?证明你的答案. 文心一言: 首先,我们需 ...

  6. [转帖]Kubernetes1.25.6部署文档 使用cri-docker部署K8s1.25.6

    https://zhuanlan.zhihu.com/p/600808149 本文档将通过kubeadm+docker部署K8s集群,本次集群使用的容器运行工具为docker,K8s的容器运行工具也可 ...

  7. [转帖]使用 Dumpling 和 TiDB Lightning 备份与恢复

    本文档介绍如何使用 Dumpling 和 TiDB Lightning 进行全量备份与恢复. 在备份与恢复场景中,如果需要全量备份少量数据(例如小于 50 GB),且不要求备份速度,你可以使用 Dum ...

  8. [转帖]Rocksdb的优劣及应用场景分析

      研究Rocksdb已经有七个月的时间了,这期间阅读了它的大部分代码,对底层存储引擎进行了适配,同时也做了大量的测试.在正式研究之前由于对其在本地存储引擎这个江湖地位的膜拜,把它想象的很完美,深入摸 ...

  9. [转帖]nginx配置默认首页(index.html index.htm)全流程(包含遇到问题的解决)

    https://www.cnblogs.com/tujietg/p/10753041.html#:~:text=%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9 ...

  10. [转帖]记录一次spring-boot程序内存泄露排查

    现象 spring boot项目jvm启动配置-Xms4g -Xmx4g,然而很不幸的是程序所占的内存越来越高,都达到了12个多G,只能临时重启服务 常用命令 jstat -class PID jst ...