5

私はVS2015でAngular2アプリケーションを開発しており、同じようにWebpackバンドルとミニ化環境を設定しています。MSBuildとWebpack

この私は、以下のコマンドでこれを呼び出すWebPACKのタスクランナーをもインストールされている私の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'); 
 
}

ある

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

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

セットアップがうまくいくようです。しかし、これを私のTFSビルドCIと統合したい。 webpackコマンドは、プロジェクトがビルドされた後に起動し、webpackビルドに失敗した場合にビルドエラーを報告します。私はそれが私がWebPACKのがインストールされたnode_modulesフォルダからコマンドを起動し、しようとした後にエラーで9009

を失敗した

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

私.csprojファイルに次のコードを組み込むことを試みた

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

まだ無駄です。これを動作させても、webpackでエラーが発生した場合にVSビルドが失敗するかどうかはわかりません。

どうすればいいですか?

+0

多分空白が必要ですか?最後の2番目のスニペットで、この 'SET NODE_ENV = production &&'を 'SET NODE_ENV = production &&'に置き換えてください。私はそれが愚かであることを知っている。しかし、それは私が提供できるものです! :D – Mihir

答えて

10

開発モードと本番モード用に異なるスクリプトをpackage.jsonに入れてください。次に、ビジュアルスタジオのAfterBuildイベントで、異なる設定でそれらのスクリプトを呼び出します。

2つのスクリプト、 'buildDev''buildProd' package.jsonに次の

追加:Visual StudioののAfterBuildイベントで

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

が追加これら二つの条件付きのコマンド:

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

最後にwebpack.conf.jsは次のようになります:

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; 
} 

重要な注意: CMDとしてprocess.env.NODE_ENVで確認使用するトリム()関数を作成するコマンドに空白を扱います「SET NODE_ENV =開発& & WebPACKの-d --colorを文字として使用し、NODE_ENV変数に追加します。だから私たちは '開発'としてそれを設定すると、(開発+空白)と実際に設定されます。

+0

これは本当に遅くなるのではないですか?これは、C#のビルドごとにwepackを実行していることを意味し、そうでなければ1秒のビルド時間に20秒を簡単に追加する可能性があります。 –

+0

@EamonNerbonne私は同意する、これはビルド時間を増加させます。状況に応じて、実行中のWebpackコマンドの異なる組み合わせを持つことができます。例えば、私はデバッグモード中にwebpack --watchコマンドを利用し、上記の解決策をリリースモード、すなわち夜間ビルドでのみ使用します。 あなたはもっと良い解決策を考えてみてください:) –

+0

速い返事をいただきありがとうございます。私はそれを打つつもりですが、私のチャンスはあまりないと思います... –

2

TFS CIビルドでは、要件を満たすためにこれらの手順を参照することができます。

  1. は、コマンドラインのステップ enter image description here

メモの追加NPMステップ enter image description here

  • を追加:ステップ/タスクはWebPACKのコマンドはスローにもかかわらず、成功になりそう必要とされる-bail引数があり、例外。

    また、変数をビルド定義(変数タブ)に追加することができます