次のgulpタスクがあります:
build.task('upload', {
execute: (config) => {
/*
THIS WORKS, BUT ONLY if i do "gulp upload".
"gulp upload -u < commandline options >" fails.
const uname = "johndoe@asdf.com";
const pwd = "supersecret";
const siteUrl = "https://<mytenant>.sharepoint.com/sites";
const siteCatalogUrl = "https://<mytenant>.sharepoint.com/sites/CatalogSiteName";
const catalogName = "AppCatalog";
console.log(uname);
console.log(siteUrl);
console.log(siteCatalogUrl);
console.log(catalogName);
*/
const uname = config.args['u'];
const pwd = config.args['p'];
const siteUrl = config.args['sU'];
const siteCatalogUrl = config.args['cU'];
const catalogName = config.args['c'];
console.log(uname);
console.log(siteUrl);
console.log(siteCatalogUrl);
console.log(catalogName);
return new Promise((resolve, reject) => {
const pkgFile = require('./config/package-solution.json');
const folderLocation = `./sharepoint/${pkgFile.paths.zippedPackage}`;
return gulp.src(folderLocation)
.pipe(spsync({
"username": uname,
"password": pwd,
"site": siteCatalogUrl,
"libraryPath": catalog,
"publish": true
}))
.on('finish', resolve);
});
}
});
コマンドラインでテストしているときは、次のように実行します。
gulp upload
gulp clean と呼ばれる最初のことは、sppkg を吹き飛ばします。したがって、アップロード タスクは失敗します。
私が気づいた他のアーティファクトは、説明できませんが、gulp タスクを実行すると、次のように表示されます。
Build target: SHIP
いつもの代わりに
Build target: DEBUG
出力
lab3:search-parts admin$ gulp upload
Build target: SHIP
[14:16:31] Using gulpfile /src/search/gulpfile.js
[14:16:31] Starting 'upload'...
[14:16:31] Starting gulp
[14:16:31] Starting subtask 'clean'...
[14:16:31] Finished subtask 'clean' after 119 ms
[14:16:31] The following tasks did not complete: upload
[14:16:31] Did you forget to signal async completion?
About to exit with code: 0
Process terminated before summary could be written, possible error in async code not continuing!
Trying to exit with exit code 1
関連しているかどうかはわかりませんが、念のため共有します...
ありがとう。
編集1
私は一貫して問題を再現することができ、修正も見つけましたが、本番環境で使用できるものではありませんでした。しかし、問題の根本的な原因が何であるかはまだわかりません。
問題を作成するには、構成オブジェクトを介して引数を渡すだけです。つまり、次のようにコマンド ラインからこの gulp メソッドをトリガーします。
gulp package-solution --ship
gulp upload --u "johndoe@asdf.com" --p "supersecret" --sU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --cU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --c "AppCatalog"
スクリプトを実行すると、最初に行われるのは gulp clean です。config.args[] から変数を取得するためのすべてのロジックをコメントアウトし、ハードコードされた値を使用すると...動作します。ただし、コマンドライン経由で引数を指定しないようにする必要があります。言い換えれば、これは機能します:
lab3:spparts admin$ gulp upload
Build target: DEBUG
[14:27:27] Using gulpfile /src/sp/spparts/gulpfile.js
[14:27:27] Starting 'upload'...
[14:27:27] Starting gulp
johndoe@asdf.com
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
AppCatalog
[14:27:27] Uploading spparts.sppkg
[14:27:32] Upload successful 5289ms
[14:27:35] Published file 2408ms
[14:27:35] Finished 'upload' after 7.73 s
[14:27:35] ==================[ Finished ]==================
[14:27:36] Project spparts version:4.3.0
[14:27:36] Build tools version:3.17.11
[14:27:36] Node version:v10.24.1
[14:27:36] Total duration:13 s
しかし、これはそうではありません: (js コードはまだハードコードされた値を使用していますが)
lab3:spparts admin$ gulp upload --u "johndoe@asdf.com" --p "supersecret" --sU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --cU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --c "AppCatalog"
Build target: SHIP
[14:27:27] Using gulpfile /src/sp/spparts/gulpfile.js
[14:27:27] Starting 'upload'...
[14:27:27] Starting gulp
[14:30:36] Starting subtask 'clean'...
[14:30:36] Finished subtask 'clean' after 68 ms
johndoe@asdf.com
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
AppCatalog
[14:30:36] 'upload' errored after 85 ms
[14:30:36] Error: File not found with singular glob: /src/spparts/sharepoint/solution/spparts.sppkg (if this was purposeful, use `allowEmpty` option)
要約すると、コマンド ライン引数を渡すと、スクリプトは gulp clean を呼び出します。しかし、理由はわかりません。
それが役立つ場合、ここに私のバージョン情報があります:
lab3:spparts admin$ gulp -v
CLI version: 2.3.0
Local version: 4.0.2
sp-build-web のバージョンは 1.12.1 です