是否可以使用node命令将node.js脚本作为模块运行(不使用package.json)?

ray*_*ght 21 node.js

假设我有一个code.js包含以下 node.js 脚本的文件:

const axios = require('axios')

async function getData(){
    const response = await axios.get('https://mypage.com.br')
    console.log(response.data)
}
getData()
Run Code Online (Sandbox Code Playgroud)

如果我用它执行它,node code.js它工作得很好...但是,我想将它作为一个模块执行,这样我就可以使用该import语句并将命令用作await顶层。我想在不创建带有package.json文件的项目的情况下完成此任务。我的最终结果会是这样的:

import axios from 'axios' 

const response = await axios.get('https://mypage.com.br')
console.log(response.data)
Run Code Online (Sandbox Code Playgroud)

我还没有设法让它与node命令一起工作。--input-type=module我知道我可以使用一个参数。但我尝试运行node --input-type=module code.js并收到以下错误:

SyntaxError: Cannot use import statement outside a module
Run Code Online (Sandbox Code Playgroud)

所以,这意味着它甚至还没有被识别为模块。可以做吗?我可以使用命令node作为模块来执行独立的脚本(await在顶层使用时)吗?

Arn*_*rat 11

从命令行这实际上是不可能的。您只有两个选项来制作文件 ESM。

  1. 编辑package.json以具有以下键和值。

    {
      "type": "module"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将文件扩展名从 更改.js.mjs. m代表模块

总之,下面的标志无助于将类型更改为模块。

$ node code.js --input-type=module
Run Code Online (Sandbox Code Playgroud)


Log*_*ine 10

将文件重命名为name.mjs. 此--input-type参数仅适用于 STDIN 和--eval-d 文件。