NodeJS 12语法错误:意外的令牌“导出”

时间:2020-07-27 05:20:45

标签: javascript node.js

我要做什么

我正在尝试使用库videojs-abloop

我的nodejs版本是int snapshot1 = this.value; Thread.interrupted(); int snapshot2 = this.value; if (snapshot1 != snapshot2) throw new AssertionError();

出了什么问题

首先,我按照videojs-abloop的要求安装了两个库:

v12.18.3

然后运行命令

npm install video.js videojs-abloop

错误输出

$ node --experimental-modules index.js

我的项目结构是什么

我有两个文件:$ node --experimental-modules index.js (node:31057) ExperimentalWarning: The ESM module loader is experimental. /my_path/testimport/node_modules/videojs-abloop/videojs-abloop.js:8 export default function (window, videojs) { ^^^^^^ SyntaxError: Unexpected token 'export' index.js

index.js

package.json

package.json

import videojs from 'video.js'
import abLoopPlugin from 'videojs-abloop'

abLoopPlugin(window,videojs);

我检查过的东西

我检查了ESM导入,但检查了Node.js 12 : ESM Imports,但我认为这与该问题无关

2 个答案:

答案 0 :(得分:0)

仅通过查看文件就无法确定它是ECMAScript脚本还是ECMAScript模块。因此,您需要告诉引擎这是两者中的哪一个。

在网络上,这是通过不同的MIME类型解决的,但是MIME类型在文件系统上不存在,因此Node.js使用文件扩展名(.mjs)或{ {1}}(type)来区分两者。

the documentation说的[注:我引用的是最新文档,但唯一的区别是ESM是否默认启用]:

启用

默认情况下启用对ECMAScript模块的实验支持。当传递给节点作为初始输入或被ES模块代码中的package.json语句引用时,Node.js将把以下内容视为ES模块:

  • "type": "module"结尾的文件。
  • 当最近的父级import文件包含值为.mjs的顶级字段.js时,文件以package.json结尾。
  • 作为参数传递给"type"的字符串,或者通过带有标志"module"的{​​{1}}传递给节点的字符串。

关于Node.js如何准确确定文件是ECMAScript脚本还是ECMAScript模块,还有几页内容。

您似乎拥有--eval的过时或损坏的版本。根据{{​​3}},尤其是GitHub IssuesSTDIN被编写为ECMAScript模块,但被转换为ECMAScript脚本。对于您而言,由于某种原因,您拥有一个ECMAScript模块,而不是--input-type=module的ECMAScript脚本。

答案 1 :(得分:0)

我已经发布了videojs-abloop(版本1.2.0)的更新,该更新恢复为使用Common JS导出插件。这似乎可行,要么使用require导入模块,要么使用"type":"module"--experimental-modules设置并使用import

我使用您的代码重新创建了您的问题,然后应用了更新,问题就消失了。

请更新至v1.2.0,让我知道它是否有效(通过https://github.com/phhu/videojs-abloop/issues发出)

感谢您发布问题,并对不起!

要手动进行更改,只需将node_modules / videojs-ablooop / videojs-abloop.js的第一行非注释行更改为

module.exports = function (window, videojs) {