ES6之Module 的加载实现(2)

3.Node 加载

Node 对 ES6 模块的处理比较麻烦,因为它有自己的 CommonJS 模块格式,与 ES6 模块格式是不兼容的。目前的解决方案是,将两者分开,ES6 模块和 CommonJS 采用各自的加载方案

3.1在静态分析阶段,一个模块脚本只要有一行import或export语句,Node 就会认为该脚本为 ES6 模块,否则就为 CommonJS 模块。如果不输出任何接口,但是希望被 Node 认为是 ES6 模块,可以在脚本中加一行语句

这里写图片描述

上面的命令并不是输出一个空对象,而是不输出任何接口的 ES6 标准写法

3.2import 命令加载 CommonJS 模块

Node 采用 CommonJS 模块格式,模块的输出都定义在module.exports这个属性上面。在 Node 环境中,使用import命令加载 CommonJS 模块,Node 会自动将module.exports属性,当作模块的默认输出,即等同于export default

这里写图片描述

import命令加载上面的模块,module.exports会被视为默认输出
这里写图片描述

如果采用整体输入的写法(import * as xxx from someModule),default会取代module.exports,作为输入的接口直接赋予在对象上成为属性**

这里写图片描述

上面代码中需要注意的是,整体的输出,Node 会自动为baz添加default属性,通过baz.default才能拿到module.exports

这里写图片描述

bar本身是一个对象,不能当作函数调用,只能通过bar.default调用

CommonJS 模块的输出缓存机制,在 ES6 加载方式下依然有效
这里写图片描述
即,CommonJS输出缓存的机制导致即使通过import加载了foo.js文件,得到的结果依然是缓存里的123

由于 ES6 模块是编译时通过export确定输出接口,而CommonJS 模块是运行时确定输出接口,所以采用import命令加载 CommonJS 模块时,不允许采用下面的写法(不要添加大括号,因为等价于输出的是export default)
这里写图片描述
上面的写法不正确,因为fs的书写是 CommonJS 格式的,只有在运行时才能确定readfile接口,而import命令要求编译时就确定这个接口。解决方法就是改为整体输入

这里写图片描述
这里的’express’就没有出现大括号的形式

3.3require 命令加载 ES6 模块

采用require命令加载 ES6 模块时,ES6 模块的所有输出接口,会成为输入对象的属性
这里写图片描述

上面代码中,ES6模块的default接口变成了通过require产生的es_namespace.default对象的属性。另外,由于CommonJS的输出缓存机制,所以es.js在已经输出foo后再对foo的重新赋值没有在模块外部反映出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux tail 命令详解

用途从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。语法标准语法tail [ -f ] [ -c Number | -…

ASP.NET+AJAX简单的文体编辑器

前言: 这里一个基于AJAX的简单的文体编辑器,主要是利用了AJAX不刷新这个来做,功能上很简单没有什么技术性的东西在里, 在这里希望能够初学习一点帮助,同时也我自己也提高和巩固了以前学过的东西;目录: 运行结果浏览 代码讲解…

判断字符串中有多少汉字

如何判断字符串中有多少汉字代码实例&#xff1a; <html xmlns"http://www.w3.org/1999/xhtml" ><head> <title>标题页</title> </head> <body> <script language"JavaScript"> function cal(str) { re…

ES6之Module 的加载实现(3)

4.循环加载 “循环加载”&#xff08;circular dependency&#xff09;指的是&#xff0c;a脚本的执行依赖b脚本&#xff0c;而b脚本的执行又依赖a脚本 通常&#xff0c;“循环加载”表示存在强耦合&#xff0c;如果处理不好&#xff0c;还可能导致递归加载&#xff0c;使得程…

oracle存储过程写法(一)

Create or Replace Procedure Proc_AppendRecords(nAppendCount int -- 要添加的记录条数)asbegindeclarenstart int;nend int;beginselect NVL(max(UserID),0) into nstart from T_Test_Checkbill;nend : nstart nAppendCount;while nstart < …

列举网络芳邻的网络资源

此范例会以递归方式列举网络芳邻的网络资源&#xff0c;在此范例中会使用到 mpr.dll API 函式库的 WNetEnumResource、WNetOpenEnum、WNetCloseEnum 函式来进行网络芳邻的网络资源的列举动作。 TAPIMpr 类别为 mpr.dll API 函式库的操作类别 1: <summary> 2: …

HDU 1087

一个简单而经典的dp; 若数组a&#xff1a;1 3 2 4 则数组b&#xff1a;1 4 3 8 b[i]每一个都要向前找 合法 的最大b[x]值加上当前的a[i]; 如b[2]b[0]a[2]; #include <iostream>using namespace std;int a[1001];int b[1001];int max_b(int i){ int max10; for(int …

Vue之重命名组件

因为header本身是关键字&#xff0c;所以这里通过重命名的方式改为’v-header’

一个封装了的选项卡效果js

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312"><title>井底的蛙</title><script type"text/j…

Struts2学习笔记1

一&#xff0e;下载struts2.0.1 http://struts.apache.org/downloads.html&#xff0c;下载struts-2.0.1-all.zip&#xff0c;这个压缩包中包括了开发struts2所需的struts2-core.jar核心包以及其他struts2所依赖的JAR文件&#xff0c;另外另一些struts2的演示样例程序以及一些H…

如何在oracle中查询所有用户表的表名、主键名称、索引、外键等

使用select * from user_tables 可以查询出所有的用户表。 查所有用户的表在all_tables 主键名称、外键在all_constraints 索引在all_indexes 但主键也会成为索引&#xff0c;所以主键也会在all_indexes里面。 具体需要的字段可以DESC下这几个view&#xff0c;dba登…

Vue路径的别名

这里给’components’赋予了一个地址&#xff0c;那么在程序中引入路径的时候’components’就直接可以代替路径’../src/components’

汽车驾照分类

驾照级别分类 公安部正式发布《机动车驾驶证业务工作规范》规定&#xff0c;推出机动车驾驶证分级制&#xff0c;将驾照分为A1、A2、A3、B1、B2、C1、C2、C3、C4、D、E、F、M、N、P共15个级别。 公安部根据不同车型的驾驶难度和安全要求&#xff0c;将目前驾驶证签注的3种准驾…

uni-app附件预览

// 预览附件perviewFile(file) {console.log(点击附件, file)var strfile.previewUrlvar filTypestr.split(.)console.log(filType,filType)uni.downloadFile({url: success: function(res) {console.log(打开文档成功, res);if (res.statusCode 200) {uni.saveFile({tempFile…

简单的单级下拉菜单实现

这里用纯CSS实现一个简单的单级下拉菜单&#xff0c;鼠标划过菜单标题时显示下拉菜单。 基本思路 在菜单处于光标之下时显示菜单&#xff0c;其余时候隐藏。这个过程首先得想到 :hover 伪类来实现&#xff0c;但是直接的利用伪类还不行&#xff0c;因为普通状态下菜单隐藏了&am…

C#里面的继承

举个例子&#xff1a;有一个基类RectangleEx1 classRectangleEx2 {3 privateint_x, _y, _w, _h;4 5 publicintx6 {7 get{ return_x; }8 set{ _x value; }9 }10 publicinty11 {12 get{ return_y; }13 set{ _y value; }14 }15 publicintw16 {17 get{ return_w; }18 set{ _w value…