如何从 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

我将使用该部署提交消息来指示版本,或在日志中易于搜索的内容。