ES6 import 相当于 require() 没有导出

Posted

技术标签:

【中文标题】ES6 import 相当于 require() 没有导出【英文标题】:ES6 import equivalent of require() without exports 【发布时间】:2017-05-01 23:32:11 【问题描述】:

通过使用require(./filename),我可以在 filename 中包含并执行代码,而无需在 filename 本身中定义任何导出。

在 ES6 中使用 import 的等价物是什么?

谢谢

【问题讨论】:

【参考方案1】:

等价的很简单:

import "./filename";

以下是一些可能的语法变化:

import defaultMember from "module-name";  

import * as name from "module-name";  

import  member  from "module-name";  

import  member as alias  from "module-name";  

import  member1 , member2  from "module-name";  

import  member1 , member2 as alias2 , [...]  from "module-name";  

import defaultMember,  member [ , [...] ]  from "module-name";  

import defaultMember, * as name from "module-name";  

import "module-name";

来源: MDN

【讨论】:

根据您在答案中引用的same page,这实际上似乎是不正确的。这种导入将执行代码,但不会保留对已定义变量的任何引用(我也在我的项目中确认了这种行为)。 例如,如果我有一个名为code.js 的文件,其中我有const foo = 1; console.log(foo);,并且我在main.js 中说import "code.js",我将无法访问foomain.js 中.但是,1 将打印到控制台,因为code.js 中的代码将执行。如果这有点难以理解,这里有一个 StackBlitz 来展示我在做什么。 @brandaemon 这正是 NodeJS 和 require 的工作原理。并不是它不保留引用,而是这些变量是块作用域,所以你不能在调用模块中访问它们。如果您将 foo 放在窗口(浏览器)或全局(节点)上,这将按照您的预期进行 啊,好吧。所以没有明确的exports 就没有办法包含范围引用?我正在考虑当 html 文件中有多个脚本标签时会出现的行为。 @brandaemon 没有,没有。不过,我可以看到您认为它会以同样的方式工作!

以上是关于ES6 import 相当于 require() 没有导出的主要内容,如果未能解决你的问题,请参考以下文章

js中import和require的区别

es6 import 和node 的require

ES6 import

用于导入 commonjs / amd 模块的新 es6 语法,即 `import foo = require('foo')`

node 环境下一个文件如何同时支持 import 和 require

ES6动态导入()vs AMD要求()