J'utilise actuellement l'outil node-sass de NPM, mais la version de libsass qu'elle utilise est la version 3.2.2, et la version que j'ai besoin d'exécuter est la version 3.2.4, car cela corrige un bogue crucial dans l'un des frameworks que je suis. en utilisant.
Je ne trouve aucune information sur la manière de construire et/ou de mettre à jour node-sass ou libsass pour répondre à mes besoins. J'utilise déjà la dernière version de node-sass, 3.1.2.
Pourtant, mon node-sass package.json
semble avoir une paire clé: valeur qui indique que libsass est à 3.2.4, mais ce n'est clairement pas correct.
Quel est le moyen le plus simple de mettre à jour ma version de libsass?
J'ai fait quelques recherches supplémentaires et n'arrive toujours pas à obtenir libsass avec une version de 3.2.4. J'ai essayé de mettre à jour un ancien paquet de node-sass et de vérifier les variables d'environnement afin de rechercher des remplacements. Aucune solution pour le moment.
Il semble que la version de Libsass provenant de node-sass soit 3.2.4, mais elle n’a pas encore été prise en compte, et utilise par défaut Libass binarypath
:
path.join(__dirname, '..', 'vendor', sass.binaryName.replace(/_/, '/'));
qui sur ma machine donne:
H:\myproj\node_modules\gulp-sass\node_modules\node-sass\vendor\win32-x64-14\binding.node
Je n'ai aucune idée de ce que cela signifie. Jetez un coup d’œil à node-sass\lib\extensions.js
à la ligne 134:
sass.getBinaryPath = function(throwIfNotExists) {
var binaryPath;
if (flags['--sass-binary-path']) {
binaryPath = flags['--sass-binary-path'];
} else if (process.env.SASS_BINARY_PATH) {
binaryPath = process.env.SASS_BINARY_PATH;
} else if (pkg.nodeSassConfig && pkg.nodeSassConfig.binaryPath) {
binaryPath = pkg.nodeSassConfig.binaryPath;
// This is the only statement that executes successfully, my libsass binary path is coming from this location. Why?
} else {
binaryPath = path.join(__dirname, '..', 'vendor', sass.binaryName.replace(/_/, '/'));
}
if (!fs.existsSync(binaryPath) && throwIfNotExists) {
throw new Error(['`libsass` bindings not found in ', binaryPath, '. Try reinstalling `node-sass`?'].join(''));
}
return binaryPath;
};
sass.binaryPath = sass.getBinaryPath();
Pouvez-vous essayer ci-dessous les étapes:
Cela devrait résoudre votre problème.
Il n'y a pas de commande spéciale pour cela. Jetez un coup d'œil au fichier lib/extensions.js
. Il a plusieurs lignes intéressantes:
/**
* The default URL can be overriden using
* the environment variable SASS_BINARY_SITE
* or a command line option --sass-binary-site:
*
* node scripts/install.js --sass-binary-site http://example.com/
*
* The URL should to the mirror of the repository
* laid out as follows:
* SASS_BINARY_SITE/
* v3.0.0
* v3.0.0/freebsd-x64-14_binding.node
* ... etc. for all supported versions and platforms
*/
Libsass
dans ce cas est seulement un dossier source . Vous pouvez essayer de faire un build propre. Supprimez node-sass
et réinstallez-le.
npm install [email protected]
...
node ./node_modules/.bin/node-sass --version
node-sass 3.0.0 (Wrapper) [JavaScript]
libsass 3.2.2 (Sass Compiler) [C/C++]
Lors de la mise à jour:
npm update node-sass
node ./node_modules/.bin/node-sass --version
node-sass 3.1.2 (Wrapper) [JavaScript]
libsass 3.2.4 (Sass Compiler) [C/C++]
P.S. Soyez prudent avec @at-root
dans 3.2.4
. C'est bugged .
Mise à jour
Si cela ne résout pas votre problème, essayez de supprimer tout le cache npm
avec
npm cache clean
Deuxième mise à jour
Essayez d’installer manuellement la reliure:
cd node-sass
rm -r vendor
node scripts/install.js --sass-binary-site https://github.com/sass/node-sass/releases/download/
Cela produira quelque chose comme:
Binary downloaded and installed at /Users/sobolev/Documents/github/modernizr-mixin/node_modules/node-sass/vendor/darwin-x64-14/binding.node
La dernière version de node-sass 3.2.0 dit
Cette version oblige Libsass à 3.2.5, ce qui apporte de nombreuses corrections.
npm install node-sass
va installer maintenant installer un noeud-sass avec un libsass> = 3.2.5.