Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
108
rated 0 times [  115] [ 7]  / answers: 1 / hits: 14269  / 4 Years ago, mon, july 27, 2020, 12:00:00

What I'm trying to do


I'm trying to use the library videojs-abloop


My nodejs version is v12.18.3


What is the problem


First I installed two libraries as asked from videojs-abloop :


npm install video.js videojs-abloop

Then ran the command


$ node --experimental-modules index.js

Error output


$ 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'


What is my project structure


I two files : index.js and package.json :


index.js


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

abLoopPlugin(window,videojs);

package.json


{ "type": "module" }

What I have checked


I checked about the ESM imports but Node.js 12 : ESM Imports, but I think it is not related to this problem


More From » node.js

 Answers
2

It is impossible to tell just from looking at a file whether it is an ECMAScript Script or an ECMAScript Module. Therefore, you need to tell the engine which of the two it is.


On the web, this is solved via different MIME Types, but MIME Types don't exist on filesystems, so Node.js uses the file extension (.mjs) or the type field in package.json ("type": "module") to distinguish between the two.


As the documentation says [Note: I am quoting from the latest docs, but the only difference is whether ESM are enabled by default or not]:



Enabling


Experimental support for ECMAScript modules is enabled by default. Node.js will treat the following as ES modules when passed to node as the initial input, or when referenced by import statements within ES module code:



  • Files ending in .mjs.

  • Files ending in .js when the nearest parent package.json file contains a top-level field "type" with a value of "module".

  • Strings passed in as an argument to --eval, or piped to node via STDIN, with the flag --input-type=module.



There are several pages more about how exactly Node.js determines whether a file is an ECMAScript Script or an ECMAScript Module.


You seem to have an outdated or somehow broken version of videojs-abloop. According to the GitHub Issues, and particularly this commit, videojs-abloop is written as an ECMAScript Module but is transpiled to an ECMAScript Script. In your case, for some reason, you have an ECMAScript Module instead of an ECMAScript Script of videojs-abloop.


[#3063] Friday, July 24, 2020, 4 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lara

Total Points: 462
Total Questions: 100
Total Answers: 102

Location: Jersey
Member since Mon, Jun 14, 2021
3 Years ago
lara questions
;