我正在为Visual Studio 2017中的ASP.NET Core Angular应用程序设置发布管道,并且npm任务查找package.json文件时遇到了主要问题。我知道文件在那里-最初是在ClientApp文件夹中,而且我也已将其添加到主文件夹和dist文件夹中,以进行测试,而我试图弄清为什么它不喜欢我的文件!
我确实尝试了所有可能性,包括使用$(System.DefaultWorkingDirectory)。这是我第一次在Azure DevOps中工作,也是我第一次尝试建立管道。我无休止地搜索Google,甚至尝试重新排队构建管道。
我完全有可能设置了错误类型的发布管道。我选择了一个空工作,我有3个任务-npm安装,npm构建和发布工件(我一直在尝试遵循一些在线教程)。我还从ASP.Net Core模板制作了构建管道,运行了yaml文件,等等。
请注意,我确实安装了node.js和angular,并确保正确的文件位于dist文件夹中。我添加了一个web.config文件,并将其添加到我的angular json文件中的资产中。我还向package.json文件夹中添加了一个小脚本来进行实际构建。
"project": {
"name": "Test"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"src/web.config"
],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"styles.css",
"../node_modules/bootstrap/dist/css/bootstrap.min.css"
],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"name": "Test",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"prod-build-dev": "ng build --prod --build-optimizer",
"prod-build-staging": "ng build --prod --configuration=staging --build-optimizer"
},
我希望npm任务找到package.json文件,但事实并非如此。请查看这些错误消息,其中每个错误消息都会为包含package.json的工作文件夹提供不同的输入。一是找不到目录。另一方面,它找不到文件。
错误#1:错误:Npm失败,返回码:4294963238
与:
配对14错误enoent ENOENT:没有这样的文件或目录,请打开 'D:\ a \ r1 \ a \ package.json'2019-08-10T15:08:12.2500818Z 15错误 这与npm无法找到文件有关。
和
错误#2:错误:ENOENT:没有这样的文件或目录,统计信息 'D:\ a \ r1 \ a \ Test \ ClientApp \ dist'
答案 0 :(得分:0)
欢迎来到Azure开发团队痛苦的世界。一旦您习惯了它们一年左右的时间,它们就不会太糟糕,但是它们在背面仍然很痛苦,几乎没有有用的文档方式(或者有用的SO帖子)。
从理论上讲,您希望构建步骤从最基本的方面看起来像这样:
1。 npm install
npm task
-v1。*
Command
:安装
Working folder that contains package.json
:使用...
导航至Test>Test>ClientApp
(鉴于您对回购结构的最新评论)。
2。 ng build
注意:我们使用PS脚本做一些额外的工作,但实际上归结为可以运行ng build。
PowerShell
-v2。*
Type
:内联
Script
:ng build --output-path = $(Build.ArtifactStagingDirectory)
Advanced > Working Directory
:使用...
导航到您的Test>Test>ClientApp
目录。
3。复制/发布工件
Publish build artifacts
-v1。*
Path to publish
:$(Build.ArtifactStagingDirectory)
选择您的姓名和位置...
理论上-一个非常大的理论-应该起作用。无论您将Angular应用程序埋得有多深,只要它具有标准的Angular cli目录结构,都应该可以从该顶级目录进行构建。
> Test
> Test
> ClientApp -- top level dir
> src
> e2e
angular.json
package.json
etc...
答案 1 :(得分:0)
使用Angular Application在Azure DevOps中构建发布管道-找不到包含package.json的工作文件夹
根据错误消息:
没有此类文件或目录,请打开“ D:\ a \ r1 \ a \ package.json”
似乎您没有为选项Working folder that contains package.json
使用正确的路径。您正在工件目录的根文件夹中搜索package.json文件。 D:\a\r1\a\
。
要解决此问题,您应该指定工作文件夹,例如$(System.DefaultWorkingDirectory)\Test\Test\ClientApp
注意:您在构建管道时应发布项目/解决方案,否则,我们将无法在发布管道中获取文件。
希望这会有所帮助。
答案 2 :(得分:0)
我遇到了同样的问题,这是因为运行管道的linux服务器对目录名称区分大小写,而我测试脚本的Windows则不区分大小写。
答案 3 :(得分:0)
在某些情况下,您可能需要通过在工作定义中添加一个步骤来明确告知AzureDevOps实际签出有问题的存储库。
jobs:
- checkout: self