通过导入和导出制作最少的工作 JavaScript 代码

Posted

技术标签:

【中文标题】通过导入和导出制作最少的工作 JavaScript 代码【英文标题】:Make minimal working JavaScript code with import and export 【发布时间】:2020-12-01 12:26:06 【问题描述】:

我使用 Eclipse。我已经下载了节点。版本是12.16.3

寻找模块化,有点像 Java 类导入之类的东西。 我想要的是能够编写 javascript 代码并将它们分成几个文件。 我查看了这些 Stack Overflow 问题:

Import and Export javascript

Why is 'type: module' in package.json file?

https://nodejs.org/docs/latest-v13.x/api/esm.html#esm_enabling

我有两个文件 first.js 和 second.js。 first.js 应该从 second.js 导入并使用一个函数,然后我应该能够运行 first.js。

代码如下:

first.js:

import aFunction from "./second.js";
var firstNumber = 42;
var secondNumber = 100;


console.log(firstNumber);
console.log(secondNumber);  
var answer = aFunction(secondNumber);
console.log(answer);

second.js:

export var hello = 200;

export function aFunction(numberToDouble) 
    return numberToDouble * 2;

package.json:


    "type": "module"

所有三个文件都在同一个文件夹中。当我将 first.js 作为节点程序运行时,出现此错误:

C:\Program Files\nodejs\node.exe first.js 
internal/modules/cjs/loader.js:1149
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\xxxx\Desktop\xxxx\xxx\first.js
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1149:13)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 
  code: 'ERR_REQUIRE_ESM'

【问题讨论】:

那是……有很多文字要通读。像这样的问题通常在 Stack Overflow 上表现不佳。如果您可以将文本提炼成主要问题和足够的代码来重现您看到的错误,我认为您可能会更快地得到答案。 另请注意,在 Node.js 中使用 ES 模块在 v12 中是实验性的:nodejs.org/dist/latest-v12.x/docs/api/… 你的 nodejs 版本太旧了。要么使用 --experimental-modules 要么切换到当前的稳定。 谢谢。该死的你编辑速度很快! :-o 大声笑。我努力平衡。如果我太短,人们会抱怨没有提到自己的研究和解决方案,如果我太彻底,那么没人会读它 x)。但你是对的,这个有点太长了xD。将编辑。 @GottZ facepalm,你说对了。我记得不是很久以前我下载了它。也不认为这一切在此时都是实验性的。我下载了最新的稳定版,现在它可以工作了,尽管警告说它是实验性的。将您的评论变成答案,我会检查它作为答案。 【参考方案1】:

Node 12.x 在功能标志 --experimental-modules 后面带有 es6 模块

您要么必须将其添加到 package.json 中的 start 指令以获得 npm start 快捷方式,要么切换到带有开箱即用的 es6 模块的当前稳定版本。

我还建议将 javascript 文件重命名为 .mjs 以保持惯例。未来你可以使用 .mjs 和 .cjs 在模块和常见遗留代码之间切换。

更多信息请参见官方文档:https://nodejs.org/api/esm.html

【讨论】:

以上是关于通过导入和导出制作最少的工作 JavaScript 代码的主要内容,如果未能解决你的问题,请参考以下文章

Postman使用手册1——导入导出和发送请求查看响应

导入和导出javascript [重复]

将 CommonJS 默认导出导入为命名导出/无法加载 ES 模块

javascript 导出和导入模块

javascript 导入,要求和导出

javascript 模块化(导入和导出文件)