ES6导入相当于require()而没有导出

cra*_*ash 39 javascript require node.js ecmascript-6 javascript-import

通过使用require(./filename)我可以包含并执行文件名内的代码,而不在文件名本身内定义任何导出.

ES6使用的等价物是什么import

谢谢

Cod*_*gue 60

相当于:

import "./filename";
Run Code Online (Sandbox Code Playgroud)

MDN有一个很好的语法变体列表:

从"module-name"导入defaultMember;
从"module-name"导入*作为名称;
从"module-name"导入{member};
从"module-name"导入{member as alias};
从"module-name"导入{member1,member2};
从"module-name"导入{member1,member2 as alias2,[...]};
从"module-name"导入defaultMember,{member [,[...]]};
import defaultMember,*作为"module-name"的名称;
导入"module-name";

(强调我的)

  • 根据您在答案中引用的 [同一页面](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_a_module_for_its_side_effects_only),这实际上似乎不正确。这种导入将执行代码,但不会保留对已定义变量的任何引用(我也在我的项目中确认了这种行为)。 (5认同)
  • 例如,如果我有一个名为 `code.js` 的文件,其中有 `const foo = 1; console.log(foo);` 并且我在 `main.js` 中说 `import "code.js"`,我将无法访问 `main.js` 中的 `foo`。然而,`1` 将被打印到控制台,因为 `code.js` 中的代码将被执行。如果这有点难以理解,这里有一个 [StackBlitz](https://stackblitz.com/edit/js-lanbce?file=index.js) 来演示我在做什么。 (5认同)
  • @brandaemon这正是NodeJS&require的工作方式.并不是它不保留引用,而是那些变量是*块范围的*因此您无法在调用模块中访问它们.如果您在窗口(浏览器)或全局(节点)上放置了foo,这将表现得如您所愿 (2认同)
  • 啊好吧。那么没有明确的`export`s就没有办法包含作用域引用吗?我正在考虑在 HTML 文件中有多个脚本标签时的行为。 (2认同)
  • @brandaemon 没有,没有。我可以理解你会认为它会以同样的方式工作! (2认同)