require 与 import
common.js 模块化规范
// require 在代码执行阶段才会调用引入文件,编译(预解析)时不会执行,所以下面会报错
// console.log(dep); ReferenceError: dep is not defined
const dep = require('./dep'); // require 加载的是一个对象(即 module.exports 属性, 不是exports), const定义的变量不会预解析
console.log(dep); // { count: 1 }
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指向的对象
// 第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次
// 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 的区别
- 属于不同的模块规范 require/exports -> CommonJS ; import/export -> ES6
- 加载模块时机不同: require -> 运行时直接加载模块 ; import -> 编译时加载模块
- require 可以写在代码的任意位置, import 只能写在文件的最顶端且不可在条件语句或者函数作用域中使用
- require/exports输出的是一个值的拷贝; import/export 输出的是值得引用,不能对引入模块重新赋值/定义
- 是否采用严格模式: commonjs 导出的模块默认不使用严格模式, es6 默认调用严格模式
exports.fun = ()=>{
mistypedVaraible = 17; //没有调用严格模式,不会报错
}; export default var fun=()=>{
mistypedVaraible = 17; //报错,mistypedVaraible is not defined
}; - import(modulePath) 表达式加载模块并返回一个 promise
import('/modules/my-module.js') //动态导入
.then((module) => {
// Do something with the module.
});
require 与 import的更多相关文章
- 转:彻底搞清楚javascript中的require、import和export
原文地址:彻底搞清楚javascript中的require.import和export 为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Ja ...
- 008_Node中的require和import
一.js的对象的解构赋值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuri ...
- NodeJS中的require和import
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...
- vue 更新了vue-cli到最新版本后引发的问题: require和import、vue-loader的问题
"vue-loader": "^12.1.0", "vue-loader": "^12.1.0", "vue- ...
- javascript中的require、import和export模块文件
CommonJS 方式 文件输出如math.js: math.add = function(a,b){ return a+b; }exports.math = math; 文件引入: math = r ...
- JS 中的require 和 import 区别整理
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...
- Node中没搞明白require和import,你会被坑的很惨
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...
- require和import的使用
一.前言 ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引 ...
- require与import
require 和 import,都是为了JS模块化使用.最近项目中,因为多人协同开发,出现了一个项目中同时使用了require 和 import 引入依赖的情况.正常情况下,一个项目中最好是对引入方 ...
- Node中导入模块require和import??
转自:https://blog.csdn.net/wxl1555/article/details/80852326 S6标准发布后,module成为标准,标准的使用是以export指令导出接口,以im ...
随机推荐
- springBoot项目打jar包
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- vue 状态管理 五、Module用法
系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...
- C#使用ParseExact方法将字符串转化为日期格式
private void btn_Convert_Click(object sender, EventArgs e) { #region 针对Windows 7系统 string s = string ...
- python爬虫-豆瓣电影top250
一.python爬虫简介1.什么是爬虫:网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本.由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略 ...
- [STM32H7] 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
引出问题: 一个好的工程项目代码,特别是开源类的,如果能做到各种优化等级通吃,是一种非常好的工程案例,这样别人借鉴的时候,可以方便的适配到自己工程里.但实际项目中,针对一款产品代码,我们一般不会 ...
- Advanced .Net Debugging 1:你必须知道的调试工具
一.简介 我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用.他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查.这里的临时性是指,通过 ...
- [转帖]ESX/ESXi 主机上的每个插槽中安装了多少内存
https://www.cnblogs.com/reachos/p/11242302.html 要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2 ...
- [转帖]linux下/proc/sysrq-trigger详解
/proc/sysrq-trigger详解 这是一组"魔术组合键",只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键能即时打印出内核的信息. 使用SysRq组合键是了解 ...
- [转帖]CentOS8完美升级gcc版本方法
https://blog.whsir.com/post-6114.html 在CentOS8系统中,默认gcc版本已经是8.x.x版本,但是在一些场景中,还是需要高版本的gcc,网上一些作死的文章还在 ...
- [转帖]Linux如何查看网关地址
转至:https://baijiahao.baidu.com/s?id=1733537078943023051&wfr=spider&for=pc 服务器之间的通信是通过ip地址来 ...