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. 嵌入式软件工程师笔试面试指南-ARM体系与架构

    哈喽,大家好.我终于回来了!19号刚提交完大论文,就被抓去出差了,折腾了整整一周,26号晚上,才回到学校.鸽了好久都没更新干货了.今天更新一篇关于Arm的笔试面试题目,文章内容已同步更新在github ...

  2. C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

    最近在开发的时候,特别是遇到关于跨DLL申请对象.指针.内存等问题的时候遇到了这么一个问题. 问题 跨DLL能不能调用到DLL中提供的单例? 问题比较简单,就是我现在有一个进程A,有DLL B DLL ...

  3. 电机控制和Linux驱动开发哪个方向更好呢?

    电机控制和Linux驱动开发哪个方向更好呢? 先说结论:任何一个领域,就像世间的五行,阴阳结合,虚实结合,利弊结合.对于哪个更好,不能一概而论,最重要的是要搞清楚,你更适合哪个? 1.共鸣 当我看到这 ...

  4. mysql-数值函数-取整-保留小数位-求余数

  5. [转帖]六千字带你了解 Oracle 统计信息和执行计划

    https://cloud.tencent.com/developer/article/1616706 大家好,我是 JiekuXu,很高兴又和大家见面了,今天分享下 Oracle 统计信息和执行计划 ...

  6. Redis不同版本性能研究

    Redis不同版本性能研究 背景 前期同事遇到了一个大key的慢查询. 前提条件是: 一个 60万key的环境里面. 有一个 260万元素的set类型的key 产品经常会进行 smember key ...

  7. [转帖]webpagetest 私有化部署

    https://www.jianshu.com/p/83bd6b3473ae 介绍 webpagetest 是一款开源的 web 性能测试工具,开源地址,每个人都可在其公共实例上对自己的 web 应用 ...

  8. ipset的学习与使用

    ipset的学习与使用 场景说明 虽然可以通过: firewall-cmd --zone=trusted --add-source=$1 --permanent && firewall ...

  9. [转帖]Kdump配置及使用(详细)总结(二)

    一.简介 本文主要介绍如何打开Kdump并对其相关文件进行配置.前面章节已经对Kdump调试机理进行总结总结,具体可以点击下面链接: Kdump调试机理总结(一) crash工具分析vmcore文件常 ...

  10. [转帖]Linux中split大文件分割和cat合并文件详解

    https://www.yingsoo.com/news/servers/70195.html 当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而 ...