在gulpfile.js中获得对ES6类的访问权限。

24 浏览
0 Comments

在gulpfile.js中获得对ES6类的访问权限。

我正在尝试在Node.js中掌握ES6的导入功能,并尝试使用此示例提供的语法:\n

Cheatsheet链接

\n我正在查看支持表,但我找不到支持新导入语句的版本(我尝试查找文本导入/ require)。我当前正在运行的是Node.js 8.1.2,而且我相信由于Cheatsheet是指.js文件,所以应该适用于.js文件。\n当我运行以下代码(从Cheatsheet的第一个示例中获取)时:\n

import { square, diag } from 'lib';

\n我收到以下错误:\n

\nSyntaxError: 意外的标记import。\n

\n我尝试导入的库的引用:\n

//------ 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));
}

\n我错过了什么,如何使node识别我的import语句?

0
0 Comments

使用importexport在JavaScript文件中是不可能的。但是,自2018年5月起,在纯Node.js中可以使用上述功能,而无需使用任何模块,如Babel等。

以下是一种简单的方法来实现这一点。创建下面的文件,运行并查看输出结果。还别忘了查看下面的解释。

文件myfile.mjs

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

文件index.mjs

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. 在运行时,您需要将--experimental-modules添加到node index.mjs中。
  3. 在使用实验性模块运行时,输出中会显示"(node:12020) ExperimentalWarning: The ESM module loader is experimental."
  4. 我使用的是当前版本的Node.js,因此如果运行node --version,会得到"v10.3.0",尽管推荐版本是8.11.2 LTS。
  5. 将来的某一天,当这些功能稳定下来时,您可以使用.js而不是.mjs。
  6. 有关实验性功能的更多信息,请参见:https://nodejs.org/api/esm.html

根据以上内容,问题的原因是无法在gulpfile.js中访问ES6类。解决方法是使用上述提到的方法,创建.mjs文件并使用--experimental-modules标志运行Node.js。

0
0 Comments

通过使用npm包esm,可以在Node.js中使用ES6模块。它不需要配置。使用esm,您将能够在JavaScript文件中使用export/import。

在终端上运行以下命令

yarn add esm

npm install esm

之后,您需要在启动服务器时使用node来引用这个包。例如,如果您的node服务器运行index.js文件,您将使用以下命令:

node -r esm index.js

您还可以像这样将它添加到您的package.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"

},

}

然后从终端运行此命令启动您的node服务器:

npm start

更多详细信息,请查看此链接:https://www.wisdomgeek.com/development/web-development/how-to-import-export-es6-modules-in-node/

似乎我在使用星号符号导入时遇到了问题。例如:`import * as log from 'loglevel';`

我希望在尝试使用import * as log 'loglevel'之前,您能从'loglevel'导出您的函数。

这真是太棒了!不幸的是,它在Jest中不起作用。

这是与TypeScript一起使用的最佳选项,因为ts-node加载器使.mjs扩展名变得不可行。`node -r esm -r ts-node/register index.ts`

注意:破坏了TS reflect-metadata:https://github.com/standard-things/esm/issues/809

问题的原因是需要在gulpfile.js中访问ES6类,而gulpfile.js默认不支持ES6模块导入/导出语法。解决方法是使用npm包esm,通过在终端运行命令`yarn add esm`或`npm install esm`来安装esm。安装后,在启动gulpfile.js之前,需要使用node引用esm包。可以通过在终端运行命令`node -r esm gulpfile.js`来启动gulpfile.js。

0
0 Comments

问题的原因是使用gulpfile.js文件时无法访问ES6类。解决方法是根据Node.js的版本不同采取不同的操作。

如果Node.js版本在v13及以上,解决方法如下:

- 将文件保存为.mjs扩展名,或者

- 在最近的package.json中添加{"type": "module"}

如果Node.js版本在9.6 - 12之间,解决方法如下:

- 将文件保存为.mjs扩展名,并使用以下命令运行:node --experimental-modules my-app.mjs

- 或者在package.json中添加{"type": "module"},并使用以下命令运行:node --experimental-modules my-app.js

对于使用.mjs文件的方法,需要注意在.mjs文件中使用require语句会导致错误。可以使用.js文件扩展名,并在package.json中添加{"type": "module"},然后使用以下命令运行:node --experimental-modules my-app.js。

需要注意的是,在导入模块时,需要写入完整路径并添加.js扩展名,否则Node.js会抛出错误。

以上是解决在gulpfile.js中无法访问ES6类的方法。更多信息可以参考Node.js文档:nodejs.org/api/esm.html#esm_package_json_type_field

0