Visual StudioでASP.NET 5プロジェクトをセットアップし、TypeScriptおよびそれ以下のファイルをビルドするために使用するgulpfile.jsを作成しました。
リリースビルドの場合は、javascriptを醜く連結し、デバッグの場合は、TypeScript-とマップを出力フォルダーに含めます。
現在の構成を「伝える」方法はありますか? NODE_ENV環境変数を設定することについてのいくつかの言及を見てきましたが、これまでのところ私が見たソリューションは最適ではありません。 IDEなどを起動する前にコマンドラインを使用する必要があります。
私が見た最も近い解決策はここにあります: http://www.colinsalmcorner.com/post/gulp--workaround-for-handling-vs-solution-configuration
ただし、これはIDEに組み込まれているTask Runner Explorerを利用できないことを意味します
Visual Studio 2015では、gulpの統合により、@ edo limburgと@RamenChefの答えが最も気に入っています。
私は単一のページangularアプリを同じWeb apiと同じソリューションで使用しています。SPAを構築するときに、HTML内のAPIおよびOAuth2(OIDC)認証サーバーへのURLを置き換えたかっただけです。いくつかのJavaScriptファイル。
デバッグタスクとリリースタスクの両方を含むgulpfile.jsを作成しました。大文字と小文字が区別されるスペルに注意してください。
gulp.task('Debug', function () {
gulp.src("./callback.html")
.pipe(replace(uatAuthority,
debugAuthority))
.pipe(gulp.dest('./'));
...
}
gulp.task('Release', function () {
gulp.src("./callback.html")
.pipe(replace(debugAuthority,
uatAuthority))
.pipe(gulp.dest('./'));
)
}
参考までに、置換タスクを処理するためにgulp-string-replaceを含めました。
var replace = require('gulp-string-replace');
Task Runner Explorerでタスクをテストした後、プロジェクトファイルをアンロードして編集し、次のコードをプロジェクト終了タグの直前に追加しました。
<Target Name="BeforeBuild">
<Exec Command="gulp $(Configuration)" />
</Target>
私はこれがしばらく前からあったことを知っていますが、最近同じ問題に遭遇し、SOの回答で見つけた他の解決策と回避策に不満がありました。私はaspnet githubページのコメントで私たちが行った非常に素晴らしい解決策を見つけました: https://github.com/aspnet/Home/issues/1231#issuecomment-182017985
誰かが私よりも速く、より幸せな解決策を見つけられるようになることを願っています。
簡単に言うと、プロジェクト構成の事前ビルドイベントに次の行を追加します
echo {"config" : "$(ConfigurationName)"} > ../buildConfig.json
その小さな美しさに座って、あなたはそれをあなたの仕事で読んで、それに応じて反応することができます。私は次のようにデバッグモードでファイルを縮小するのを防ぐためにそれを使います:
gulp.task("min:js:bundlesFolder", function ()
{
var json = fs.readFileSync("./buildConfig.json", "utf8");
var Host = JSON.parse(json.replace(/^\uFEFF/, ''));
Host.isDebug = Host.config == "Debug";
console.log(Host.isDebug);
if (Host.isDebug === true)
{
return;
}
return gulp.src([paths.jsbundleFolder + "/**/*.js", "!" + paths.jsbundleFolder + "/**/*.min.js"])
.pipe(uglify())
.pipe(gulp.dest(paths.jsbundleFolder));
});
ビジュアルスタジオでは、
.csprojファイルをアンロードし、ビルド後のターゲットに行を追加して編集します
<Target Name="AfterBuild">
<MSBuild.Gulp GulpFile="path to your gulpfile"/>
</Target>
ここに使用できるすべてのプロパティがあります:
ご覧のように、実行されたタスクはVisual Studioで構成の名前を取ります。そのため、プロジェクトを「デバッグ」でビルドすると、タスク「ビルド-デバッグ」が実行されます
カスタムタスクが必要な場合は、次のようにすることもできます。
<Target Name="AfterBuild">
<MSBuild.Gulp Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" GulpFile="path to your gulpfile" GulpBuildTask="CustomDebug"/>
<MSBuild.Gulp Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU'" GulpFile="path to your gulpfile" GulpBuildTask="CustomRelease"/>
</Target>
免責事項:私はnpm、うなり声、むしゃむしゃにまったく新しいです。しかし、ビルド前のイベントを使用した簡単な解決策を見つけたと思います。
Grunt(またはgulp)ファイルを含むプロジェクトのビルド前のイベントコマンドラインに次の行を追加します。
npm update && grunt $(ConfigurationName)
これで、ビルド構成と同じ名前の不快なタスクがある限り、すべて設定できます。
grunt.registerTask('Debug', ['sass', 'concat']);
grunt.registerTask('Release', ['sass', 'concat', 'cssmin', 'removelogging', 'uglify']);
ビルドを実行しているマシンには、通常の前提条件が必要です。これらをすべてインストールしたら、必ずVSを再起動してください。すべての不快なタスクを実行するには、Visual Studioを管理者として実行する必要があります
gem install sass
npm install -g grunt-cli
私が見つけた最も簡単な方法:
grunt- https://docs.Microsoft.com/en-us/aspnet/core/client-side/using-grunt
gulp- https://docs.Microsoft.com/en-us/aspnet/core/client-side/using-gulp
cmd.exe /c gulp -b ".\.." --color --gulpfile ".\..\Gulpfile.js" $(ConfigurationName)
Visual Studioを使用していて、プロジェクトテンプレートが空白のアプリ(Apache Cordova)であり、ビルドイベントが表示されない場合を右クリックするとProjectNameをソリューションエクスプローラーで開き、以下のようなプロパティに移動します。
次に、Cordovaフックを使用してソリューション構成を管理できます。これらは、cordovaコマンドをカスタマイズするためにソリューションに挿入された特別なスクリプトであり、ソリューションのアクティビティ/イベントで実行されます。詳細については、「 this 」を参照してください。
従うべき手順:
プロジェクトのルートディレクトリで、次のようにフックJavaScriptファイル(たとえば、「solutionConfigHook.js」)を含む新しいフォルダ(たとえば、「hooks」)を作成します。
"use strict";
// function to run the '_default' task in 'gulpfile.js'
// based on solution configuration (DEBUG or RELEASE) prior to building the solution
module.exports = function (context) {
var config = getConfig(context.cmdLine);
if (!config) {
console.log('Unable to determine build environment!');
return;
}
else {
var exec = require('child_process').exec, child;
console.log('Runnung Gulp tasks now...');
// 'solutionConfig' is the command line argument for config value passed to the gulpfile
// '_default' is the task name in *gulpfile.js* that will have access to 'solutionConfig'
var gulpCommand = 'gulp _default --solutionConfig ' + config.toString();
console.log(gulpCommand);
child = exec(gulpCommand, function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
}
}
// function to get the solution configuration using CLI
function getConfig(cmdLine) {
var matches = /--configuration (\w+)/.exec(cmdLine);
if (matches && matches.length > 1) {
return matches[1];
}
return null;
}
このフックをconfig.xmlファイルに追加し、希望するフックタイプに対して、プラットフォームごとに次のようにします。
(参考までに、ここで抜粋したコードはWindowsプラットフォームのみを対象としており、「before_build」フックタイプで呼び出されます。)
<platform name="Android">
... // other resources or attributes
<hook src="hooks/solutionConfigHook.js" type="before_build" />
</platform>
gulpfile.jsで、上部の参照を削除するか、またはTask Runner Explorerに移動して、それぞれを右クリックして、タスクのバインディングを削除します。タスクとすべてのバインディングのチェックを外します。
gulpfile.jsにタスクを追加します。これは、フックタイプとしてconfig.xmlで定義されているアクティビティのフック自体によって呼び出されます。
gulp.task('_default', function (solutionConfig) {
if (solutionConfig == "Release") {
// perform desired task here
}
else if (solutionConfig == "Debug" {
// perform desired task here
}
});
Exec Buildタスクを使用してgulpタスクを実行しています。
<Target Name="BeforeBuild">
<Exec Command="gulp beforeBuild --c $(Configuration) --p $(Platform)" />
</Target>
タスク自体として設定を実行する代わりに、設定をフラグとしてgulpタスクに渡すことができる別のソリューションを次に示します。これにより、 gulp-if を使用して、タスク内からさまざまなプロシージャをトリガーできます。
注:この回答は、gulpがグローバルにインストールされていないことを前提としています。
開発依存としてgulpをインストールする
npm install gulp --save-dev
Gulpをnpmスクリプトとして登録する
{
"name": "vs-build-test",
...
"scripts": {
"gulp": "gulp"
}
}
インストール yargs カスタムフラグを処理する
npm install yargs --save-dev
configuration
フラグのデフォルトでgulpfiles.js
にyargsを要求する
var argv = require('yargs').default('configuration', 'Debug').argv
gulpfile.js
でビルドタスクを作成します
gulp.task('build', function () {
console.log(`Build Configuration: ${argv.configuration}`);
});
ビルド前のイベントを追加してgulpを実行します[Project Properties -> Build Events -> Pre-build Event]
cmd.exe /c npm run gulp build -- --configuration $(ConfigurationName)
これが役立つ理由は、同じタスクを使用できるが、プロセスの一部のみを条件付きで実行できるようにするためです。 JavaScriptをビルドするタスクを例にとります:
gulp.task('build:js', function () {
let isProduction = ${argv.configuration} === 'Release';
...
return gulp.src(source)
.pipe(gulpif(!isProduction, sourcemaps.init()))
.pipe(concat(outputFile, { newLine: ';' }))
.pipe(gulpif(isProduction, closure(closureFlags)))
.pipe(gulpif(!isProduction, sourcemaps.write()))
.pipe(gulp.dest(basePath));
});