最近在一直hugo-book这个主题的时候发现在调试时不能同时通过 npx eleventy --serve && rollup -w -c ,找了很多资料没有找到合适的解决办法。

最后通过GPT4解决,利用 npm-run-all这个包处理。

ChatGPT4回答

可以使用npm的concurrently或者npm-run-all来并行运行多个scripts。

先安装concurrently:

npm install --save concurrently

然后在package.json中添加以下script:

"scripts": {
  "serve": "concurrently \"rollup -c --watch\" \"npx eleventy --serve\"",
  "build": "rollup -c && npx eleventy"
}

这个script会先运行rollup -c --watchnpx eleventy --serve。其中rollup -c --watch会在文件更改时重新运行 rollup,而 npx eleventy --serve会在文件更改时重新运行 11ty。优点是这两个命令同时运行,所以他们都会在文件更改时立即更新,不需要手动重新运行它们。

也可以安装使用npm-run-all:

npm install npm-run-all --save-dev

然后在package.json中添加以下script:

"scripts": {
  "rollup": "rollup -c --watch",
  "serve": "npx eleventy --serve",
  "start": "run-p rollup serve"
}

其中run-pnpm-run-all提供的命令,可以并行运行多个npm scripts,上面的script效果跟使用concurrently是一样的。

不过这些方法都不适合先后顺序执行rollup和11ty的情况,因为--watch模式一旦开始就不会结束,它会一直等待文件更改然后再次运行。如果你的用例确实需要先执行rollup然后执行11ty,而且两者不能并行,那么你可能需要创建一个node.js脚本来依次调用这两个命令,并在每次文件更改时重新运行该脚本。