有没有办法通过package.json中定义的“npm start”脚本从导出的函数运行NodeJS脚本?

uidvcgyl  于 2023-03-17  发布在  Node.js
关注(0)|答案(3)|浏览(91)

问题

我有一个运行node index.js的脚本。当我试图模拟AWS Lambda函数的结构时,我将代码的运行逻辑移到了一个定义为export async function handler(...) {的函数中。这个函数可以通过命令行使用命令node -e "import('./index.js').then(module => module.handler())"来执行。

预期结果

我想运行命令:node -e "import('./index.js').then(module => module.handler())",方法是在npm脚本中定义它。最好通过执行npm start来运行它。

尝试的解决方案

package.json中:

{
  ...
  "scripts": {
    "start": "...",
  },
  ...
}

尝试将"start": "..."设置为以下值,执行时返回错误:

  • "node -e 'import(\\'./index.js\\').then(module => module.handler())'"
  • "node -e 'import(\\'./index.js\\').then(function (module) { module.handler(); })'"
  • "node --eval='import(\\'./index.js\\').then(module => module.handler())'"
  • "node --eval='import(\\'./index.js\\').then(function (module) { module.handler(); })'"

尝试使用这些器械似乎无法评价:

  • x1米11米1x
  • "node --eval='import(\\'./index.js\\').handler()'"
  • "node -e 'require(\\'./index.js\\').handler()'"
  • "node --eval='require(\\'./index.js\\').handler()'"

我知道以上这些都是多余的,我正在努力做到彻底。任何帮助将不胜感激。

zc0qhyus

zc0qhyus1#

我只需要创建scripts/start.js

import { handler } from './index.js'
handler()

然后。

{
  ...
  "scripts": {
    "start": "node scripts/start.js"
  },
  ...
}
68bkxrlz

68bkxrlz2#

这应该行得通:

"start": "node -e \"import('./index.js').then(module => module.handler())\""
sulc1iza

sulc1iza3#

基于此答案https://stackoverflow.com/a/68848622/5089567
您可以将以下代码添加到脚本中:

import { pathToFileURL } from 'url'

if (import.meta.url === pathToFileURL(process.argv[1]).href) {
  handler()
}

然后像这样运行文件

node index.js

相关问题