当前位置: 首页 > 知识库问答 >
问题:

我如何使用ES6导入Node.js?[重复]

陶成济
2023-03-14

我试图在Node.js中掌握ES6导入的技巧,并尝试使用本示例中提供的语法:

我正在浏览支持表,但我无法找到支持新导入语句的版本(我试图寻找文本导入/要求)。我目前正在运行Node.js8.1.2,并且还相信,由于小抄引用的是. js文件,它应该与. js文件一起工作。

当我运行代码时(取自备忘单的第一个例子):

import { square, diag } from 'lib';

我得到的错误:

语法错误:意外的令牌导入。

对我尝试导入的库的引用:

//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

我遗漏了什么?如何让节点识别我的导入语句?

共有3个答案

宫子晋
2023-03-14

我只想在JavaScript文件中使用导入导出

每个人都说这是不可能的。但是,从2018年5月起,可以在普通节点中使用上述功能。js,没有任何模块,如Babel等。

下面是一个简单的方法

创建以下文件,运行,并亲自查看输出。

也别忘了看下面的解释

function myFunc() {
    console.log("Hello from myFunc")
}

export default myFunc;
import myFunc from "./myfile.mjs"  // Simply using "./myfile" may not work in all resolvers

myFunc();
node  --experimental-modules  index.mjs
(node:12020) ExperimentalWarning: The ESM module loader is experimental.

Hello from myFunc

说明:

  1. 由于是实验模块,. js文件被命名为. mjs文件
  2. 在运行时,您将向节点添加-实验模块index.mjs
  3. 在输出中运行实验模块时,您将看到:(节点: 12020)实验警告:ESM模块加载器是实验性的。
  4. 我有当前版本的Node.js,所以如果我运行节点版本,它会给我v10.3.0,尽管LTE/稳定/推荐版本是8.11.2 LTS。
  5. 在未来的某一天,您可以使用. js而不是. mjs,因为特性变得稳定而不是实验性的。
  6. 有关实验特性的更多信息,请参见:https://nodejs.org/api/esm.html
艾志尚
2023-03-14

您还可以使用名为esm的npm包,它允许您在节点中使用ES6模块。js。它不需要配置。使用esm,您将能够在JavaScript文件中使用导出/导入。

在终端上运行以下命令

yarn add esm

npm install esm

之后,在使用节点启动服务器时,需要使用此包。例如,如果节点服务器运行索引。js文件,您可以使用以下命令

node -r esm index.js

您还可以将其添加到包中。像这样的json文件

{
  "name": "My-app",
  "version": "1.0.0",
  "description": "Some Hack",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node -r esm index.js"
  },

}

然后从终端运行此命令以启动节点服务器

npm start

查看此链接以了解更多详细信息。

水品
2023-03-14

Node.js已包括对ES6支持的实验支持。阅读更多关于这里:https://nodejs.org/docs/latest-v13.x/api/esm.html#esm_enabling.

太长,读不下去了

节点。js

在Node.js13及以上非常简单。你需要要么:

  • 使用保存文件。mjs扩展,或

您只需执行上述操作之一即可使用ECMAScript模块。

节点。js

如果您使用的是Node.js版本8-12,请使用扩展名为. mjs的ES6模块保存文件,并运行如下操作:

node --experimental-modules my-app.mjs
 类似资料:
  • 问题内容: 在我正在合作的项目中,关于可以使用哪种模块系统,我们有两个选择: 导入使用的模块,并使用导出和。 使用ES6导入模块,并使用ES6导出 相互使用是否对性能有好处?如果要在Node模块上使用ES6模块,还有其他什么应该知道的吗? 问题答案: 相互使用是否对性能有好处? 请记住,还没有JavaScript引擎本身支持ES6模块。您说自己正在使用Babel。无论如何,Babel都会默认将其转

  • 问题内容: 我试图在节点中陷入进口的泥潭,并试图使用此示例中提供的语法: [备忘单链接](https://hackernoon.com/import-export-default-require-commandjs- javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f) 我正在浏览支持表,但无法找到

  • 问题内容: 我在玩和使用和。我想在不同的文件中构建多个组件,将其导入单个文件并将其捆绑在一起 假设我有几个这样的组件: my-navbar.jsx main-page.jsx 使用webpack并按照其教程进行操作,我有: 构建项目并运行它之后,在浏览器控制台中出现以下错误: 我究竟做错了什么?如何正确导入和导出组件? 问题答案: 尝试 默认设置 组件中的导出: 通过使用默认值,您表示将成为该模块

  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • 用例很简单:我只想导出一个名称与导入时相同的对象。 例如: 但这并不起作用。我必须写: 但这很奇怪。正确的方法是什么? 更新: 感谢帮助和参考。我用许多线索解决了我的问题。下面给大家分享一些我常见的案例和解决方法。

  • 问题内容: 使用ES6导入时,是否可以将某些内容导入提供变量名称的模块中? 即我想根据配置中提供的值在运行时导入一些模块: 问题答案: 不与声明。并以可静态分析的方式进行定义,因此它们不能依赖于运行时信息。 您正在寻找loader API(polyfill),但是我对规范的状态尚不清楚: