如何使用 npm 升级 Libsass?
Posted
技术标签:
【中文标题】如何使用 npm 升级 Libsass?【英文标题】:How can I upgrade Libsass with npm? 【发布时间】:2015-08-21 07:07:44 【问题描述】:我目前正在运行 NPM 的 node-sass 工具,但它运行的 libsass 版本是 3.2.2,而我需要运行的版本是 3.2.4,因为这修复了其中一个关键错误我正在使用的框架。
我找不到有关如何构建和/或更新 node-sass 或 libsass 以满足我的要求的信息。我已经在运行最新版本的 node-sass 3.1.2。
然而,我的 node-sass package.json
似乎有一个键:值对表明 libsass 是 3.2.4,但这显然是不正确的。
升级我的 libsass 版本最简单的方法是什么?
更新
6 月 6 日
我做了一些额外的搜索,但仍然无法让 libsass 处于 3.2.4 版本。我尝试升级旧的 node-sass 包,并检查我的环境变量是否有覆盖。还没有解决办法。
6 月 7 日
看来 node-sass 提供的 Libsass 版本是 3.2.4,但它没有被选中,并且默认为 Libass binarypath
:
path.join(__dirname, '..', 'vendor', sass.binaryName.replace(/_/, '/'));
在我的机器上产生:
H:\myproj\node_modules\gulp-sass\node_modules\node-sass\vendor\win32-x64-14\binding.node
我不知道这意味着什么。看看第 134 行的node-sass\lib\extensions.js
:
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();
【问题讨论】:
我添加了手动方法。试试看。 您确定这里没有回答您的问题吗:***.com/questions/28409100/… @cinnamon,不。这是关于 libsass 的,它是 node-sass 的一个依赖项。 你有什么进展吗? 【参考方案1】:对此没有特殊的命令。查看lib/extensions.js
文件。它有几个有趣的行:
/**
* 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
在这种情况下只是一个source folder。您可以尝试进行干净的构建。删除node-sass
并重新安装。
npm install node-sass@3.0.0
...
node ./node_modules/.bin/node-sass --version
node-sass 3.0.0 (Wrapper) [javascript]
libsass 3.2.2 (Sass Compiler) [C/C++]
更新时:
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++]
附:小心3.2.4
中的@at-root
。是bugged。
更新
如果它不能解决您的问题,请尝试删除所有npm
缓存
npm cache clean
第二次更新 尝试手动安装绑定:
cd node-sass
rm -r vendor
node scripts/install.js --sass-binary-site https://github.com/sass/node-sass/releases/download/
它会输出类似:
Binary downloaded and installed at /Users/sobolev/Documents/github/modernizr-mixin/node_modules/node-sass/vendor/darwin-x64-14/binding.node
【讨论】:
抱歉,我无法让它工作。我检查了我的环境变量;没有什么可以覆盖所使用的 libsass 的选择,而且我无法安装 node-sass 3.0.0 而不会出现错误。 Libsass 仍然是 3.2.2。 你试过彻底删除 node-sass 吗?你得到什么错误? 是的。我现在已经删除并安装了十几次 node-sass,不同的版本,本地的,全局的,都没有成功。 可能是缓存问题?我已经更新了我的答案。 嗯...似乎不是。npm cache clean
'd,并重新安装了 node-sass 和 gulp-sass。还是不行:(【参考方案2】:
node-sass 3.2.0 最新发布的说
这个版本将 Libsass 提升到 3.2.5,带来了一堆 修复。
npm install node-sass
现在将安装 libsass >= 3.2.5 的 node-sass。
【讨论】:
在撰写本文时安装当前版本给了我 node-sass 3.2.0 和 libsass 3.2.5。如果您想在不进行大量自我维护的情况下拥有与您的 node-sass 版本兼容的 libsass 3.2.4+ 版本,请立即进行升级。【参考方案3】:您可以尝试以下步骤吗:
-
git 克隆https://github.com/sass/node-sass.git
cd node-sass
git checkout tags/v3.1.2
npm 安装。 -g
node-sass -v
这应该可以解决您的问题。
【讨论】:
以上是关于如何使用 npm 升级 Libsass?的主要内容,如果未能解决你的问题,请参考以下文章