【问题标题】:Is it possible to use npm to run scripts in multiple subfolders?是否可以使用 npm 在多个子文件夹中运行脚本?
【发布时间】:2015-09-25 13:58:19
【问题描述】:

我有一个包含 3 个子文件夹(客户端、服务器、资产)的文件夹(一个项目)。每个子文件夹都有不同的命令来启动和处理我需要启动 3 个应用程序的项目。这是文件夹布局和我用来启动每个子项目的命令:

  • 项目
    • 客户端(离子服务)
    • 服务器(节点索引)
    • 资产(http-server -p 8082)

目前,我分别转到三个文件夹并启动每个应用程序。为了让流程更加规范,每个子项目都有一个带有启动脚本的package.json,所以我就cd subfolder && npm start

我的问题: 是否可以在父文件夹上使用 npm(即,在那里写一个 package.json),这样我就可以运行以下命令并拥有相同的(或类似的)效果?

项目> npm 开始

我尝试过使用包parallelshell,但是没有用(可能是因为cd:

"scripts": {
  "start": "parallelshell 'cd app && ionic serve' 'cd api && npm start' 'cd assets && npm start'",
}

【问题讨论】:

    标签: npm


    【解决方案1】:

    您可以使用“并发”来完成此操作。因此,您将创建一个类似于以下内容的 package.json:

    ...
    "scripts": {
      "client": "cd client && npm start",
      "server": "cd server && npm start",
      "assets": "cd assets && ionic serve",
      "start": "concurrently \"npm run client\" \"npm run server\" \"npm run assets\" ",
    },
    ...
    "devDependencies": {
      "concurrently": "^1.0.0"
    }
    ...
    

    注意:这将同时启动所有三个进程,这意味着您会得到所有三个进程的混合输出(就像已经提到的 topheman)

    【讨论】:

    • 谢谢,小修复"start": "concurrent -> "start": "concurrently
    • 作为一个迟到的评论,但尽管如此,我还是想提一下npm-run-all (github.com/mysticatea/npm-run-all)。我根本没有使用过concurrently,很遗憾既不能给出意见也不能给出建议。也许其他人可以启发我们?
    【解决方案2】:

    真的很晚才回答,但你有内置选项--prefix, 示例:

    -package.json
    -/dist/ssr/package.json
    
    # package.json in root
    npm run start --prefix dist/ssr
    

    【讨论】:

    • ps:在纱线中使用--cwd
    • 如何同时在多个文件夹上运行此命令?假设我在路径-/dist/xyz/package.json中除了上述文件夹之外还有另一个文件夹
    • 我的建议是每个命令一个。如果您想将它用作多行,则必须处理 daemon 命令启动多行。或者只是使用 docker 和 traefik 来举例
    • 这很棒,我确认它有效,尽管我无法通过docs.npmjs.com 找到任何文档。 @darksoulsong - 这是一个 npm 脚本示例,它使用 Concurrently 包同时运行命令:``` "scripts": { "back:dev": "npm run start --prefix back", "front:dev": "npm运行 dev --prefix front", "start": "npx concurrently \"npm:back:dev\" \"npm:front:dev\"" }, ```
    【解决方案3】:

    问题在于所有三个脚本都是类似服务器启动的脚本任务,这意味着它们不像构建任务(例如)运行10s 并停止该过程。

    对于它们中的每一个,您启动它们,然后该过程无限期地继续

    您可以使用forever 之类的守护进程方式启动所有这些,但在您的情况下,您处于开发模式(所以您需要所有日志,并且您不希望来自nodejs服务器的错误混合与离子的...)。

    如果您不介意混合日志:https://www.npmjs.com/package/forever(我认为这与 parallelshell 几乎相同......)

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2020-09-18
      • 2022-10-19
      • 1970-01-01
      • 2020-05-08
      相关资源
      最近更新 更多