ES6中没有exports的require()等价物是什么?

82

通过使用 require(./filename),我可以在没有任何导出定义的情况下,包含并执行filename内部的代码。

在ES6中,使用 import 有什么相当的方法吗?

谢谢

2个回答

126

等价物只是简单地:

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


10
根据你在答案中引用的同一页,实际上似乎是不正确的。这种类型的导入会执行代码,但不会保留对定义的变量的任何引用(我在自己的项目中也确认了这种行为)。 - intcreator
8
举个例子,如果我有一个名为 code.js 的文件,在其中写着 const foo = 1; console.log(foo);,然后在 main.js 中写上 import "code.js",我将无法在 main.js 中访问 foo,但是代码中的 console.log 会打印出 1。如果这有点难以理解,可以参考这个 StackBlitz 来演示我正在做什么。 - intcreator
5
这正是NodeJS和require工作的方式。它并不是没有保留引用,但这些变量是块级作用域的,因此您无法在调用模块中访问它们。如果你把foo放到window(浏览器)或global(Node)上,它将表现出您期望的行为。 - CodingIntrigue
3
еҘҪзҡ„пјҢжүҖд»ҘжІЎжңүеҠһжі•еңЁжІЎжңүжҳҫејҸexportзҡ„жғ…еҶөдёӢеҢ…еҗ«дҪңз”Ёеҹҹеј•з”ЁпјҹжҲ‘еңЁиҖғиҷ‘еҪ“жӮЁеңЁHTMLж–Ү件дёӯжңүеӨҡдёӘи„ҡжң¬ж Үзӯҫж—¶еҫ—еҲ°зҡ„иЎҢдёәгҖӮ - intcreator
2
@brandaemon,没有这个功能。不过我能理解你为什么会认为它会以同样的方式工作! - CodingIntrigue
显示剩余3条评论

1

答案需要更改,因为原来的方法已经不再适用了。如果您仍然想使用import './otherfile.js'而不使用exports,只是为了提高代码的可读性,您必须在html中导入js文件时添加type="module"

<script src="js/main.js" type="module"></script>

编辑:似乎您还需要添加.js(otherfile.js),否则它也不再起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接