【问题标题】:Is it possible to run a node.js script as a module with the node command (without using package.json)?是否可以使用 node 命令将 node.js 脚本作为模块运行(不使用 package.json)?
【发布时间】:2023-01-05 02:57:32
【问题描述】:

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

const axios = require('axios')

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

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

import axios from 'axios' 

const response = await axios.get('https://mypage.com.br')
console.log(response.data)

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

SyntaxError: Cannot use import statement outside a module

所以,这意味着它甚至还没有被识别为一个模块。有可能吗?我可以使用命令 node 作为模块执行隔离脚本吗(同时在顶层使用 await)?

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

    【讨论】:

    • 谢谢,重命名文件后它起作用了。但是我处于一个非常特殊的情况下,重命名文件不是一个可行的解决方案。有没有办法在不重命名文件的情况下将其声明为模块?
    • 不,没有。
    【解决方案2】:

    这在命令行中是不可能的。您只有两个选项来制作文件 ESM。

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

      {
        "type": "module"
      }
      
    2. 将文件扩展名从 .js 更改为 .mjs。这代表模块.

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

      $ node code.js --input-type=module
      

    【讨论】:

    • 根据我的回答:--input-type 标志仅适用于--eval'd 或源 STDIN 文件。
    【解决方案3】:

    另一种不重命名文件的替代方法是使用 pipe 执行代码。以下命令作为模块运行良好:

    cat code.js | node --input-type=module
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2013-11-26
      • 1970-01-01
      • 2021-08-15
      • 2019-07-02
      • 2012-06-30
      • 2020-08-11
      相关资源
      最近更新 更多