gpt4 book ai didi

javascript - 为什么 import 语句中的 fromClause 需要字符串文字?

转载 作者:行者123 更新时间:2023-11-29 21:08:22 26 4
gpt4 key购买 nike

在我们之前的 node.js 应用程序(基于 ES5)中,我们努力在 require 语句中使用相对路径。

例如:var conf = require('../../global/config');

相对路径的问题在代码混淆中冒出来了。我们不得不花费大量时间来处理这个问题。

有了这些经验,在我们当前的 node.js 应用程序(基于 ES6)中,虽然我不确定我们是否会混淆代码,但我不想使用相对路径。因此,我在每个文件中创建了一个 const ROOTDIR 并将项目的绝对路径分配给它。然后意识到 import 在它的 fromClause 中只需要静态文字。这通过强制键入(复制/粘贴)每个 import 的完整路径或使用相对路径返回或使用 require 语句来使生活变得困难。

enter image description here

虽然我试图了解使用 import 样式的好处,但我需要一些帮助来理解以下 3 点。

  1. 除了类似 java/.net 的编码风格之外,使用 import 有什么优势?

  2. 为什么 import 只接受字符串文字?这似乎是设计使然,如果是,为什么?

  3. 如果我想根据某些条件导入一个模块,我将不得不使用require,因为我不能使用导入if/elseswitch 语句中。有什么解决方案/破解方法吗?

感谢所有帮助。

最佳答案

首先,请记住 import 当前不受任何环境支持,包括 Node.js。因此,您可能会使用一个转译器,例如 Babel,它将假设一个 CommonJS 环境(例如 Node),并使用 require 进行填充。

importrequire 不同,它旨在进行静态分析。也就是说,您的代码可以在不运行的情况下进行分析,并且可以判断需要加载哪些模块。

这意味着:

  1. import 声明被提升。无论它们在哪里声明,它们实际上都存在于文件的最顶部。
  2. 因此将它们放在 block 中是无效的。
  3. 因此将它们放在条件句中是无效的。
  4. import 语句之前文件中不能存在任何内容,因此不能使用任何变量(包括常量),因为在import 语句时它们将不存在正在运行。

因为代码可以静态分析,这将在未来简化捆绑代码的过程。它可以准确地确定需要包含哪些代码,这意味着您的代码可以更容易地编译分发。例如,如果浏览器请求一个包含 import 语句的 JS 文件,服务器可以看到它并将两者打包在一起。这还有很长的路要走,但很可能就是 future !

关于javascript - 为什么 import 语句中的 fromClause 需要字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42886721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com