When node-sass fails to install, the traceback often points to node-gyp and a invalid Python syntax error:
gyp ERR! stack Error: Command failed: python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack SyntaxError: invalid syntax
Older node-gyp releases embedded Python 2.x print statements. If the active interpreter is Python 3, the version probe crashes before compilation even begins. This fallback to native rebuild usually happens because node-sass lacks a prebuilt binary for the current Node.js runtime.
Start recovery by removing generated lockfiles and cached metadata:
rm -f package-lock.json
npm cache clean --force
Then reconcile dependency versions in package.json. The package node-sass must match the installed Node.js ABI, and sass-loader must remain compatible with that node-sass release. A reliable set for Node.js 14.x looks like this:
{
"devDependencies": {
"node-sass": "4.14.1",
"sass-loader": "8.0.2"
}
}
If the project pins an older loader, only bump node-sass to avoid breaking the webpack pipeline. Proven pairings include:
| sass-loader | node-sass |
|---|---|
| 7.3.1 | 4.14.1 |
| 7.0.3 | 4.7.2 |
| 4.1.1 | 4.3.0 |
Apply the selected versions with:
npm uninstall node-sass sass-loader
npm install -D sass-loader@<version> node-sass@<version>
Verify the Node.js version first with node -v, then cross-check it against the node-sass release matrix. When the runtime aligns with a release that provides prebuilt binaries, installation completes without ever invoking Python or a compiler toolchain.