如何使用npm升级Libsass?

14

我目前正在运行NPM的node-sass工具,但它所运行的libsass版本是3.2.2,而我需要运行的版本是3.2.4,因为这修复了我使用的一个框架中的关键错误。

enter image description here

我找不到任何有关如何构建和/或更新node-sass或libsass以满足我的要求的信息。我已经运行了最新版本的node-sass,即3.1.2。

然而,我的node-sass的package.json似乎有一个键值对,指示libsass是3.2.4,但这显然不正确。

升级我的libsass版本最简单的方法是什么?

更新

6月

我进行了一些额外的搜索,仍然无法使libsass的版本达到3.2.4。我尝试升级旧的node-sass包并检查环境变量是否被覆盖,但目前还没有解决方案。

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();
 

我已经添加了一个手动方法。试一下吧。 - sobolevn
你确定你的问题没有在这里得到解答吗:https://dev59.com/TF4c5IYBdhLWcg3wCGVJ - cimmanon
@cinnamon,不是的。这是关于libsass的,是node-sass的一个依赖项。 - marked-down
你有任何进展吗? - sobolevn
3个回答

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只是一个源文件夹。您可以尝试进行干净的构建。删除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时要小心。它存在错误

更新
如果这不能解决你的问题,请尝试删除所有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。 - marked-down
你尝试完全移除node-sass了吗?你遇到了什么错误? - sobolevn
是的,我已经尝试过十几次移除和安装node-sass,使用不同的版本,本地和全局安装,但都没有成功。 - marked-down
可能是缓存问题吗?我已经更新了我的答案。 - sobolevn
嗯...好像不行。已经运行了 npm cache clean 命令,并重新安装了 node-sass 和 gulp-sass,但仍然无法正常工作 :( - marked-down
最后一次尝试,从git安装:npm install 此版本。如果没有成功,请尝试从那里手动下载适当的绑定(win32,我猜)。 - sobolevn

1

0

最新版本的node-sass 3.2.0说:

此版本将Libsass升级到3.2.5,带来了一系列修复。

npm install node-sass现在将安装一个libsass版本大于等于3.2.5的node-sass。


安装当前版本时间为3.2.0的node-sass和3.2.5的libsass。如果你想使用与你的node-sass版本兼容的libsass 3.2.4+版本,而不必自己维护一大堆内容,那么现在就进行升级吧。 - Alex Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接