如何从 shell 脚本调用 webpack 并得到错误
How to call webpack from shell script and get errors
我用这个 yeoman react webpack generator 制作了一个玩具应用程序,我想用 shell 脚本简化部署过程。
package.json 的一个片段看起来像这样...
"scripts": {
"clean": "rimraf dist/*",
"copy": "copyfiles -f ./src/index.html ./src/favicon.ico ./dist",
"dist": "npm run copy & webpack --env=dist",
有了这个,我当前的过程是提交更改(使用 git),然后 npm run clean
,然后 npm run dist
,然后再次提交 release # commit 消息,真正推送使用 git subtree push ...
到我的玩具生产服务器
我想用脚本自动执行此操作。这是我目前所拥有的:
首先,我添加了对脚本的调用以打包 json...
...
"deploy": "./deploy2server.sh",
...
在部署到服务器时,只有在有未提交的更改时我才会继续,然后开始我的手动过程,就像这样...
#!/bin/sh
if [[ -z $(git status -s) ]]
then
npm run clean
npm run dist
#
# My problem is here
#
# want, if no errors in my code, commit and push subtree
else
echo "must commit changes before running"
exit
fi
我的问题是我需要从 webpack 中检测错误和警告关于我的代码。 Webpack 控制台输出如下所示...
Hash: e4e23433b4c1b1ab7a97
Version: webpack 1.15.0
Time: 6140ms
Asset Size Chunks Chunk Names
app.js 188 kB 0 [emitted] main
app.js.map 1.95 MB 0 [emitted] main
+ 231 hidden modules
WARNING in ./src/components/MyComponent.js
/Users/path_to_my_project/MyComponent.js
19:13 warning 'j' is defined but never used no-unused-vars
✖ 1 problem (0 errors, 1 warning)
WARNING in app.js from UglifyJs
Condition always false [./~/fbjs/lib/invariant.js:26,0]
Dropping unreachable code [./~/fbjs/lib/invariant.js:27,0]
...a gazzillion more warnings like these, unrelated to my code
我的 shell 脚本如何仅在我的代码 中发现错误或警告 并在没有错误或警告的情况下继续?
我唯一的想法是将所有输出通过管道传输到一个 tmp 文件,然后解析它以寻找我关心的 errors/warnings,但我真的不知道如何编写解析那(在 grep 中?)并得到结果。
如果有任何帮助,我想出了如何使用 node ./node_modules/webpack/bin/webpack --env=dist
直接从脚本调用 webpack,但我仍然不知道如何获取输出或理解它。
一天有 7 次浏览?有史以来最不受欢迎的问题有徽章吗?
我通过学习 set -e
解决了这个问题,它告诉脚本在后面的命令发生任何错误时退出。现在我的部署脚本如下所示:
#!/bin/sh
if [[ -z $(git status -s) ]]
then
read -p "Deployment commit message: " message
set -e
npm run clean
npm run dist
git add -A
git commit -m "$message"
git subtree push --prefix dist origin gh-pages
else
echo "must commit changes before running"
exit
fi
我将使用该部署提交消息来指示版本,或在日志中易于搜索的内容。
我用这个 yeoman react webpack generator 制作了一个玩具应用程序,我想用 shell 脚本简化部署过程。
package.json 的一个片段看起来像这样...
"scripts": {
"clean": "rimraf dist/*",
"copy": "copyfiles -f ./src/index.html ./src/favicon.ico ./dist",
"dist": "npm run copy & webpack --env=dist",
有了这个,我当前的过程是提交更改(使用 git),然后 npm run clean
,然后 npm run dist
,然后再次提交 release # commit 消息,真正推送使用 git subtree push ...
我想用脚本自动执行此操作。这是我目前所拥有的:
首先,我添加了对脚本的调用以打包 json...
...
"deploy": "./deploy2server.sh",
...
在部署到服务器时,只有在有未提交的更改时我才会继续,然后开始我的手动过程,就像这样...
#!/bin/sh
if [[ -z $(git status -s) ]]
then
npm run clean
npm run dist
#
# My problem is here
#
# want, if no errors in my code, commit and push subtree
else
echo "must commit changes before running"
exit
fi
我的问题是我需要从 webpack 中检测错误和警告关于我的代码。 Webpack 控制台输出如下所示...
Hash: e4e23433b4c1b1ab7a97
Version: webpack 1.15.0
Time: 6140ms
Asset Size Chunks Chunk Names
app.js 188 kB 0 [emitted] main
app.js.map 1.95 MB 0 [emitted] main
+ 231 hidden modules
WARNING in ./src/components/MyComponent.js
/Users/path_to_my_project/MyComponent.js
19:13 warning 'j' is defined but never used no-unused-vars
✖ 1 problem (0 errors, 1 warning)
WARNING in app.js from UglifyJs
Condition always false [./~/fbjs/lib/invariant.js:26,0]
Dropping unreachable code [./~/fbjs/lib/invariant.js:27,0]
...a gazzillion more warnings like these, unrelated to my code
我的 shell 脚本如何仅在我的代码 中发现错误或警告 并在没有错误或警告的情况下继续?
我唯一的想法是将所有输出通过管道传输到一个 tmp 文件,然后解析它以寻找我关心的 errors/warnings,但我真的不知道如何编写解析那(在 grep 中?)并得到结果。
如果有任何帮助,我想出了如何使用 node ./node_modules/webpack/bin/webpack --env=dist
直接从脚本调用 webpack,但我仍然不知道如何获取输出或理解它。
一天有 7 次浏览?有史以来最不受欢迎的问题有徽章吗?
我通过学习 set -e
解决了这个问题,它告诉脚本在后面的命令发生任何错误时退出。现在我的部署脚本如下所示:
#!/bin/sh
if [[ -z $(git status -s) ]]
then
read -p "Deployment commit message: " message
set -e
npm run clean
npm run dist
git add -A
git commit -m "$message"
git subtree push --prefix dist origin gh-pages
else
echo "must commit changes before running"
exit
fi
我将使用该部署提交消息来指示版本,或在日志中易于搜索的内容。