使用节点如何将我的ES6远期默认模块导入到命令行JavaScript程序中



我在myModule.js

中有一个ES6模块
export default function () {
  console.log('hello world');
}

在app.js中,我导入模块

import mymodule from 'mymodule'; //also tried './mymodule' and './mymodule.js'
mymodule();

从命令行执行

node app.js

node --experimental-modules app.js

错误消息

import mymodule from 'mymodule';
   ^^^^^^^^
SyntaxError: Unexpected identifier
at Module._compile (internal/modules/cjs/loader.js:703:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
at Module.load (internal/modules/cjs/loader.js:628:32)
at Function.Module._load (internal/modules/cjs/loader.js:555:12)
at internal/modules/esm/translators.js:84:15
at Object.meta.done (internal/modules/esm/create_dynamic_module.js:40:9)
at file:///home/a/code/marionette/test_area/app.js:9:13
at ModuleJob.run (internal/modules/esm/module_job.js:111:37)
at processTicksAndRejections (internal/process/task_queues.js:88:5)
at process.runNextTicks [as _tickCallback] (internal/process/task_queues.js:58:3)

版本

node --version                                                                                                                                  
v12.0.0
npm --version
6.9.0

其他

  • Linux
  • 使用NVM
  • 尽管我正在使用npm并有一个软件包。json文件,我不想使用babel或webpack或其他一些dev依赖性来使其工作。
  • 我很高兴使用实验功能。

问题

使用节点和ES6,如何将ES6模块导入命令行JavaScript程序?

pointy的评论后,我进行了这些更改

  1. 将mymodule.js重命名为mymodule.mjs
  2. 更改为导入到

    import mymodule from './mymodule.mjs'

  3. 在package.json中添加了顶级字段

    "type": "module",

最新更新