在启动nodemon之前等待webpack捆绑

evrscar2  于 2023-05-28  发布在  Node.js
关注(0)|答案(3)|浏览(90)

我有一个用Typescript写的nodejs项目。因此,我让webpack使用了一个typescript加载器,它将我的代码转换为Javascript,并将其捆绑在server.js文件中(在dist文件夹中)。
在开发环境中,我的webpack运行时其监视器为ON,nodemon也是如此。
问题是,当我第一次结合webpack和nodemon启动我的脚本时,由于webpack处于监视模式,它没有一个退出代码说一切正常,nodemon脚本可以启动。如果我同时运行它们,nodemon将比webpack启动得更快,因为server.js文件还不存在,它将在启动时崩溃。
我想启动感谢一个单一的命令两个脚本,但使nodemon命令等待捆绑完成。

plupiseo

plupiseo1#

首先,当提交问题时请提供一些代码。
and since server.js file doesn't yet exist
我觉得你应该在你的设置周围工作一点。如果你想这么做,webpack不会创建你的server.js文件。
基本上,你可以在一个脚本中链接多个命令,比如webpack -d && nodemon index.js。这将在webpack完成后启动node。但是如果你在watch模式下设置webpack -w,它永远不存在,所以你不能链接其他命令。所以webpack -d -w && nodemon index.js永远不会到达nodemon部分。
上面的一个解决方案是只使用&来链接它们,我猜你正在这样做,但是通过这种方式,它们都同时启动。因此,如果你让你的设置独立(webpack不会干扰nodemon启动脚本),你可以像这样列出它们。
如果出于某种原因,你不能这样做或不想这样做,你唯一的选择是与2个单独的脚本,你手动启动一个接一个。

hrirmatl

hrirmatl2#

如果我是你,我会用nodemon-webpack-plugin
使用Nodemon来监视和重启模块的输出文件,但仅当webpack处于监视模式(即--watch)时。
节省了安装,配置和运行Nodemon作为一个单独的过程的需要。

kcrjzv8t

kcrjzv8t3#

如果您并行运行所有内容,则不能让nodemon等待构建。如果您正在观察变化,这会变得更加复杂-在这种情况下,nodemon将永远不会被调用。
你需要做的是检查构建是否在那里,并在通过nodemon运行应用程序之前将if else逻辑应用于构建脚本。您可以使用path-exists包进行此检查。它将提供标准的bash行为:

path-exists ./mypath && 'script for existing path' || 'script for non existing path'

如果你不想使用path-exists,而你使用的是linux like system,你可以用下面的命令替换它:

[ -d './server.js' ]

示例:

"run_nodemon": "path-exists ./server.js && yarn run nodemon_watch || yarn run build_server && yarn run nodemon_watch",
"build_server": "HERE YOU BUILD THE ./server.js BEFOR CALLING THE run_nodemon",
"nodemon_watch": "nodemon ./server.js --watch ./src/server"

此条件&&成功||失败是在类Linux环境中处理bash脚本的典型方式。

[ TEST_COMMAND ] && (
  THEN_EXPRESSIONS
) || (
  ELSE_EXPRESSIONS
)

我在一个更复杂的环境中使用它,我们将开发,站点,应用程序和服务器组合成单个monorepo,其中一些脚本必须与webpack中的监视标志并行运行,这将导致其中一个答案中提到的脚本挂起。请使用此作为参考:

"app": "cross-env NODE_ENV=development webpack serve --config webpack/webpack.app.dev.js",
"prod": "cross-env NODE_ENV=production webpack --config webpack/webpack.app.prod.js",
"prod:watch": "cross-env NODE_ENV=production webpack watch --config webpack/webpack.app.prod.js",
"site": "cross-env NODE_ENV=production webpack --config webpack/webpack.site.prod.js",
"site:watch": "cross-env NODE_ENV=production webpack watch --config webpack/webpack.site.prod.js",
"server": "cross-env NODE_ENV=production webpack --config webpack/webpack.server.prod.js",
"server:watch": "cross-env NODE_ENV=production webpack watch --config webpack/webpack.server.prod.js",
"front": "npm-run-all --parallel site prod",
"front:watch": "npm-run-all --parallel site:watch prod:watch",
"web": "npm-run-all --parallel site prod server",
"web:watch": "npm-run-all --parallel site:watch prod:watch server:watch",
"listen": "nodemon ./dist/server/server.js",
"listen:watch": "nodemon ./dist/server/server.js --watch ./dist/server",
"deploy": "yarn run web && yarn run listen",
"dev": "path-exists ./dist/server/ && npm-run-all --parallel web:watch listen:watch || yarn run web && npm-run-all --parallel web:watch listen:watch",

我希望这是有帮助的!:D

相关问题