突然在我的一个jenkins环境构建已经开始失败,而在本地机器,它似乎工作得很好,因为我有python安装,

从日志中,我能够检测到问题是内部依赖关系,即node-gyp v3.5.0从node-sass v3.8.0,当我通过访问这篇关于node-gyp的文章进行研究时,我发现了Python需要安装的先决条件。

所以我的问题是,我可以安装哪个版本的node-sass来绕过这个,或者有更好的解决方案,因为我的构建在相同的环境上运行良好,直到今天早上。

节点v5.10.1

错误日志

gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python2 { [Error: not found: python2] code: 'ENOENT' }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed     at getNotFoundError (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\index.js:44:5
gyp verb `which` failed     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\isexe\windows.js:29:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:82:15)
gyp verb `which` failed  python { [Error: not found: python] code: 'ENOENT' }
gyp verb could not find "python". checking python launcher 
gyp verb could not find "python". guessing location 
gyp verb ensuring that file exists: C:\Python27\python.exe
gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at Object.failNoPython (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:454:19)
gyp ERR! stack     at Object.<anonymous> (C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-gyp\lib\configure.js:480:16)
gyp ERR! stack     at C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:82:15)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files (x86)\\Jenkins\\jobs\\NdbSite-hot-fix-Manual-PreBuild\\workspace\\src\\NdbSite.UI\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Program Files (x86)\Jenkins\jobs\NdbSite-hot-fix-Manual-PreBuild\workspace\src\NdbSite.UI\node_modules\node-sass
gyp ERR! node -v v5.10.1
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok 
Build failed

任何想法都非常感激,谢谢。


当前回答

节点15.x。X,和"node-sass": "^4.11.0"。 我在node-sass的发布说明中看到了node-sass 4.11.0兼容的节点最高版本是11,所以我卸载了node并重新安装11.15.0版本(我使用的是Windows)。 检查node-sass释放。 (这是你应该在node-sass版本中看到的。)

希望这对你有所帮助,抱歉我的英语不好:)

其他回答

几天前我也遇到了同样的问题。相信我,他们不需要在你的项目或系统中安装或卸载其他依赖项。

我是如何解决这个问题的,让我分享一下我的经验。

请去包装。json文件 向下滚动到下面或搜索optionalDependencies Object 只需删除整个对象并保存文件 尝试NPM安装,它将工作

另一个可能的解决方案:

请检查你的包裹。如果node-sass元素存在于optionaldependencies Object中,那么你需要以这种方式运行npm命令npm install——no-optional或also

注意:此解决方案仅适用于Angular项目

在这里输入图像描述 请查看这个包的截图。json文件

Python2维护状态为“生命结束”,因此在新的ubuntu版本中默认不会安装。

安装最新的python2.7对我来说效果很好。

以下是安装说明:

下载python2.7: https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz 从下载的。tgz安装:

tar -xf Python-2.7.18.tgz
cd Python-2.7.18
./configure --enable-optimizations
sudo make altinstall

打开一个新终端并再次尝试npm安装

您需要按照以下步骤来修复该错误:

    1: DELETE node_modules
    2: npm install node-sass@<version-as-per-below-table>
    3. npm install

每个node-sass版本都对应于特定的Node.JS版本。

下面是node-sass的最小和最大支持版本的快速指南(查看下表的更新):


| NodeJS  | Supported node-sass version | Node Module |
|---------|-----------------------------|-------------|
| Node 16 | 6.0+                        | 93          |
| Node 15 | 5.0+                        | 88          |
| Node 14 | 4.14+                       | 83          |
| Node 13 | 4.13+, <5.0                 | 79          |
| Node 12 | 4.12+                       | 72          |
| Node 11 | 4.10+, <5.0                 | 67          |
| Node 10 | 4.9+, <6.0                  | 64          |
| Node 8  | 4.5.3+, <5.0                | 57          |
| Node <8 | <5.0                        | <57         |

下面是帮助我防止在运行基于旧node-gyp v3.8.0的项目时出现错误error: not found: python2的方法。

运行npm install——global——production windows-build-tools@4.0.0 将python.exe重命名为%USERPROFILE%\.windows-build-tools\python27中的python2.exe 确保%USERPROFILE%\。windows-build-tools\python27是PATH环境变量的一部分(这是windows-build-tools应该已经为你做的) 下载Visual Studio 2017构建工具 告诉npm使用VS 2017, npm配置msvs_version 2017 运行使用node-gyp的脚本(node-gyp现在会找到python2.exe)

可选:强制升级node-gyp

您还可以尝试将项目升级为使用node-gyp v8.0.0而不是node-gyp v3.8.0。在这种情况下,在package.json中添加以下决议项:

  "resolutions": {
    "node-gyp": "8.0.0"
  }

之后,确保安装了Python 3和Visual Studio 2017构建工具和/或Visual Studio 2019构建工具。你也可以执行npm config delete msvs_version命令让node-gyp自动检测你的VS版本。

测试:

Windows 10 Pro Build 19042.985 node . js v15.14.0 npm v7.7.6 Node-gyp -v v3.8.0。

node-gyp需要旧的Python 2 - link

如果你没有安装它-检查其他关于安装windows-build-tools的答案。

如果您像我一样,同时安装了旧版本和新版本的Python, node-gyp很可能会尝试使用Python 3。这将导致以下SyntaxError:无效语法错误。

我找到了一篇关于安装两个Python版本的文章。他们建议重命名Python 2。*可执行文件到python2.exe - link。

因此,node-gyp似乎希望找到重命名的旧Python 2可执行文件。因此出现错误消息:

...
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
...

一旦我将C:\Python27\python.exe重命名为C:\Python27\python2.exe,它就能正常工作,没有错误。

当然,C:\Python27\和C:\Python39\都必须在PATH变量中。并且不需要在npm配置中设置旧的Python版本。你的默认Python仍然是新的。