目前處理的專案,用到 aps.net MVC5 + Angular 2 ,以 npm 進行安裝
希望透過 msbuild 將專案 build 過後,也順道把 node_module 資料夾 copy 至 build 資料夾,
但是卻遇到 Illegal characters in path 的錯誤訊息:
所用的也是很正常的 msbuild task
<CreateItem Include="$(SourceDir)\**\*.*" Exclude="$(SourceDir)\.bin\**\*.*;"> <Output TaskParameter="Include" ItemName="NodeModulesFileItems" /> </CreateItem> <Copy SourceFiles="@(FileItems)" DestinationFiles= "@(FileItems->'$(OutputDir)\%(RecursiveDir)%(Filename)%(Extension)')" />先來查看 package.json ,看看 node_module 放了哪些 package,如下:
{ "name": "angular2-quickstart", "version": "1.0.0", "private": true, "dependencies": { "angular2": "2.0.0-beta.0", "systemjs": "0.19.6", "es6-promise": "^3.0.2", "es6-shim": "^0.33.3", "reflect-metadata": "0.1.2", "rxjs": "5.0.0-beta.0", "zone.js": "0.5.10" }, "devDependencies": { "gulp-typescript": "^2.10.0", "gulp": "^3.9.0" } }
所以原因出在 node_modules 這個資料夾到底出了什麼事!? 來實驗看看吧!
假設專案路徑是: C:\project\webapp
如果 copy 的路徑是:C:\project\webapp\Content 成功
如果 copy 的路徑是:C:\project\webapp\Image 成功
如果 copy 的路徑是:C:\project\webapp\node_modules 失敗
如果 copy 的路徑是:C:\project\webapp\node_modules\angular2 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\systemjs 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\es6-promise 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\es6-shim 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\reflect-metadata 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\rxjs 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\zone.js 成功
如果 copy 的路徑是:C:\project\webapp\node_modules\gulp-typescript 失敗
如果 copy 的路徑是:C:\project\webapp\node_modules\gulp 失敗
最後終於發現是 gulp, gulp-typescript 兩個資料夾在做怪,
由於這兩個資料夾裡面的檔案結構又深又長,導致 copy task 在複製檔案時,
因路徑太長而拋出 Illegal characters in path 訊息,
那該如何處理呢?
在發佈時,先將這兩個資料夾刪掉,以暫時解決這個問題,
使用 removedir task 刪除資料夾,
但是仍然會發生 Illegal characters in path 錯誤,我想問題應該是跟上面一樣
2016/04/21 更新: 安裝新版的 NPM,即可解決此問題,參考
因路徑太長而拋出 Illegal characters in path 訊息,
那該如何處理呢?
在發佈時,先將這兩個資料夾刪掉,以暫時解決這個問題,
使用 removedir task 刪除資料夾,
但是仍然會發生 Illegal characters in path 錯誤,我想問題應該是跟上面一樣
<removedir directories="$(dir)"></removedir>所以只好依靠 windows command - rmdir 來處理
<Exec Command="RMDIR /S /Q $(WebNodeModulesSourceDir)\gulp"/> <Exec Command="RMDIR /S /Q $(WebNodeModulesSourceDir)\gulp-typescript"/> <CreateItem Include="$(SourceDir)\**\*.*" Exclude="$(SourceDir)\.bin\**\*.*;"> <Output TaskParameter="Include" ItemName="NodeModulesFileItems" /> </CreateItem> <Copy SourceFiles="@(FileItems)" DestinationFiles= "@(FileItems->'$(OutputDir)\%(RecursiveDir)%(Filename)%(Extension)')" />打完收工!
2016/04/21 更新: 安裝新版的 NPM,即可解決此問題,參考
沒有留言:
張貼留言