NPM 安装任务在 Azure Devops 中失败,之前使用相同的代码

NPM install task failing in Azure Devops, same code worked previously

我有 yaml 管道 运行 在 Azure Devops 中构建。 Npm@1 任务今天早上开始失败。 npm install 在本地使用 npm 版本 6.14.5 并且在 npm Status 上都是绿灯。

pool:
  name: 'Azure Pipelines'
  vmImage: ubuntu-latest

stages:
  - stage: 
    variables:
      buildConfiguration: "Release"
      buildPlatform: "AnyCPU"
    jobs:
    - job: 
      steps:      
      - task: Npm@1
        displayName: 'npm install'
        inputs:
          workingDir: Azure/MySite/ClientApp

这是日志中开始出错的地方:


1156 verbose pkgid node-sass@4.14.1
1157 verbose cwd /home/vsts/work/1/s/Azure/MySite/ClientApp
1158 verbose Linux 5.11.0-1021-azure
1159 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
1160 verbose node v16.13.0
1161 verbose npm  v8.1.0
1162 error code 1
1163 error path /home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-sass
1164 error command failed
1165 error command sh -c node scripts/build.js
1166 error Building: /usr/local/bin/node /home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
1166 error make: Entering directory '/home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-sass/build'
1166 error   g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.5"' -I/home/vsts/.node-gyp/16.13.0/include/node -I/home/vsts/.node-gyp/16.13.0/src -I/home/vsts/.node-gyp/16.13.0/deps/openssl/config -I/home/vsts/.node-gyp/16.13.0/deps/openssl/openssl/include -I/home/vsts/.node-gyp/16.13.0/deps/uv/include -I/home/vsts/.node-gyp/16.13.0/deps/zlib -I/home/vsts/.node-gyp/16.13.0/deps/v8/include -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++14 -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/ast.o.d.raw   -c -o Release/obj.target/libsass/src/libsass/src/ast.o ../src/libsass/src/ast.cpp
1166 error   g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.5"' -I/home/vsts/.node-gyp/16.13.0/include/node -I/home/vsts/.node-gyp/16.13.0/src -I/home/vsts/.node-gyp/16.13.0/deps/openssl/config -I/home/vsts/.node-gyp/16.13.0/deps/openssl/openssl/include -I/home/vsts/.node-gyp/16.13.0/deps/uv/include -I/home/vsts/.node-gyp/16.13.0/deps/zlib -I/home/vsts/.node-gyp/16.13.0/deps/v8/include -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++14 -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/ast_fwd_decl.o.d.raw   -c -o Release/obj.target/libsass/src/libsass/src/ast_fwd_decl.o ../src/libsass/src/ast_fwd_decl.cpp
1166 error   g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.5"' -I/home/vsts/.node-gyp/16.13.0/include/node -I/home/vsts/.node-gyp/16.13.0/src -I/home/vsts/.node-gyp/16.13.0/deps/openssl/config -I/home/vsts/.node-gyp/16.13.0/deps/openssl/openssl/include -I/home/vsts/.node-gyp/16.13.0/deps/uv/include -I/home/vsts/.node-gyp/16.13.0/deps/zlib -I/home/vsts/.node-gyp/16.13.0/deps/v8/include -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++14 -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/backtrace.o.d.raw   -c -o Release/obj.target/libsass/src/libsass/src/backtrace.o ../src/libsass/src/backtrace.cpp
1166 error   g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.5"' -I/home/vsts/.node-gyp/16.13.0/include/node -I/home/vsts/.node-gyp/16.13.0/src -I/home/vsts/.node-gyp/16.13.0/deps/openssl/config -I/home/vsts/.node-gyp/16.13.0/deps/openssl/openssl/include -I/home/vsts/.node-gyp/16.13.0/deps/uv/include -I/home/vsts/.node-gyp/16.13.0/deps/zlib -I/home/vsts/.node-gyp/16.13.0/deps/v8/include -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++14 -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/base64vlq.o.d.raw   -c -o Release/obj.target/libsass/src/libsass/src/base64vlq.o ../src/libsass/src/base64vlq.cpp


几个月来 package.json 没有任何变化。根据错误消息,我已将问题缩小到与 note-sass 有关的问题,所以这里有一个最小的 package.json 来重现错误。

{
  "dependencies": {
    "node-sass": "^4.14.1"
  }
}

我仍然不知道为什么这突然开始失败,但我已经通过将 node-sass 更新到版本 6.0.1.

解决了这个问题
{
  "dependencies": {
    "node-sass": "6.0.1"
  }
}

宇宙中有两个谜团:1) 它的空间范围和 2) 为什么 NPM 会失败?

10990 error path /home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-sass
10991 error command failed
10992 error command sh -c node scripts/build.js
10993 error Building: /usr/local/bin/node /home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
10993 error make: Entering directory '/home/vsts/work/1/s/Azure/MySite/ClientApp/node_modules/node-sass/build'

从我在你的日志中看到的,这是猜测、可能性和个人经验的问题。您的管道正在编译 node-sass,我认为这是 nodejs 世界中最邪恶的源头。

您可能没有升级您的依赖项,这 node-sass 中的一个问题。 node-sass,其实就是二进制编译成nodejs版本的

Azure DevOps 通常会升级 Node 运行时而不告诉任何人(我昨天发布了一个关于 SonarCloud 集成的问题)。

现在,如果您(或 Azure)升级 Nodejs 运行时,那么您必须找到更新版本的 node-sass 才能使用它也兼容使用您自己的应用程序。

在你的问题中,你确实说明你在本地使用的 npm 版本是什么运行,但不是 nodejs 版本,它在 Azure 上是 16。

作为解决方法,您可以指示 Azure 使用不同的节点版本

      - task: NodeTool@0
        displayName: Install Node.js
        inputs:
          versionSpec: 'Your version e.g. 14.x'

我遇到了同样的问题。在我的本地我使用节点版本(12.18.3) 和 node-sass 版本 (4.14.1)。所以在我的本地下面的命令工作正常。

npm start
npm run build

当我将代码部署到 Azure 时,我们使用的是节点版本 (17.1),但 package.json 中的 node-sass 版本 (4.14.1)。但是这里我们需要使用node-sass version(7.x) 而不是(4.x).

Reference Link: https://www.npmjs.com/package/node-sass

所有你需要卸载 node-sass只需运行这个命令来卸载node-sass . npm uninstall node-sass 一旦卸载成功,你只需要安装 sass 而不是 node-sass。只需 运行 这个命令: npm i -D sass 现在,我的问题已经解决了。