MSBuild and Webpack

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

I am developing an Angular2 application in VS2015 and have a webpack bundling and minification environment set up for the same.

This is my webpack.conf.js

switch (process.env.NODE_ENV) {     case 'prod':     case 'production':         module.exports = require('./config/webpack.prod');         break;     case 'test':     case 'testing':         //module.exports = require('./config/webpack.test');         break;     case 'dev':     case 'development':     default:         module.exports = require('./config/webpack.dev'); }

I have also installed a webpack task runner which invokes this with the following commands

cmd /c SET NODE_ENV=development&& webpack -d --color

and

cmd /c SET NODE_ENV=production&& webpack -p --color

The setup seems to work fine. However, I want to integrate this with my TFS builds CI. The webpack command should fire after the project is built and report a build failure incase the webpack build fails. I have tried to incorporate the following code in my .csproj file

<Target Name="AfterBuild"> <Exec Condition="$(Configuration) == 'Debug'" Command="cmd /c SET NODE_ENV=production&& webpack -p --color"> </Exec> </Target>

It failed with an error 9009

After that I tried, starting the command up from the node_modules folder where webpack was installed

<Target Name="AfterBuild"> <Exec Condition="$(Configuration) == 'Debug'" Command="./node_modules/.bin cmd /c SET NODE_ENV=production&& webpack -p --color"> </Exec> </Target>

still in vain. Even if I get this to work, I am not sure if it would cause the VS build to fail if it encounters an error in webpack.

How do I go ahead with this?

回答1:

Put different scripts in package.json for development and production mode. Then on 'AfterBuild' event of visual studio, call those scripts on different configurations.

Add following two scripts, 'buildDev' and 'buildProd' in package.json:

"scripts": {     "buildDev": "SET NODE_ENV=development && webpack -d --color",     "buildProd": "SET NODE_ENV=production && webpack -p --color",   }

In AfterBuild events of visual studio add these two conditional commands:

<Target Name="AfterBuild">     <Exec Condition="$(Configuration) == 'Debug'" Command="npm run buildDev" />     <Exec Condition="$(Configuration) == 'Release'" Command="npm run buildProd" />   </Target>

And finally webpack.conf.js like this:

switch (process.env.NODE_ENV.trim()) {     case 'prod':     case 'production':         module.exports = require('./config/webpack.prod');         break;     case 'dev':     case 'development':     default:         module.exports = require('./config/webpack.dev');         break; }

Important Note: Make sure to use trim() function with process.env.NODE_ENV as cmd will treat the blank space in the command "SET NODE_ENV=development && webpack -d --color as character and append it in NODE_ENV variable. So when we are setting it as 'development', it actually gets set as (development + whitespace).



回答2:

For TFS CI build, you can refer to these steps to achieve your requirement.

  1. Add npm step

  2. Add Command Line step

Also, you can add variable in build definition (variable tab)



转载请标明出处:MSBuild and Webpack
文章来源: MSBuild and Webpack
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!