如何从shell脚本调用webpack并获取错误

时间:2017-05-12 15:53:31

标签: shell npm webpack yeoman

我用这个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,然后再次使用发布#remit消息提交,真正推送到我的玩具生产服务器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文件,然后解析它寻找我关心的错误/警告,但我真的不知道如何编写这样的解析(在grep中) ?)并得到一个结果。

如果有任何帮助,我想出了如何使用node ./node_modules/webpack/bin/webpack --env=dist直接从脚本调用webpack,但我仍然不知道如何获取输出或理解它。

1 个答案:

答案 0 :(得分:0)

超过一天的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

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