关于node.js:Node Sass找不到当前环境的绑定

Node Sass could not find a binding for your current environment

我在构建一个应用程序时遇到问题,因为节点sass总是出错。

ERROR in Missing binding /Users/warren/Sites/random-docs/my-cms/node_modules/node-sass/vendor/darwin-x64-11/binding.node
Node Sass could not find a binding for your current environment: OS X 64-bit with Node 0.10.x

我试过跑步

1
npm rebuild node-sass

哪说

Binary is fine; exiting.

运行node -v时,我得到V6.2.2

这与sass错误所说的"node 0.10.x"不同。我不明白为什么它得到了错误的版本。我还尝试删除node_modules文件夹并运行npm update或npm install,但这两种方法都没有解决问题。有什么想法吗?


我也有同样的问题

There is an error in your gulpfile:
Error: Missing binding E:\allapp\badshaindiancuisine
ode_module
ode-sass\vendor\win32-x64-46\binding.node
Node Sass could not find a binding for your current environment:Windows 64-bit with Node.js 4.x

Found bindings for the following environment:
    - OS X 64-bit with Node.js 4.x

如何解决我的问题

进入项目文件夹,然后执行:

1
npm rebuild node-sass


注意,我使用的是vs 2015 64位Windows7。

也适用于vs 2017(回复本帖)

任务运行程序资源管理器无法加载任务

对于VS 2015

  • 转到:工具>选项>项目和解决方案>外部Web工具

对于VS 2017(3)

  • 工具>选项>项目和解决方案>Web包管理>外部Web工具(per@nothrow)

In VS 2017, you also need to put $(PATH) above $(VSINSTALLERDIR)\Web\External

  • 重新排序,使$(path)高于$(devenvdir)extensionsmicrosoftweb toolsexternal

enter image description here

删除node_modules,运行npm install,然后npm rebuild node-sass什么也没做。


我在Windows环境中遇到同样的问题,收到以下错误:

Error: Missing binding C:\Development{ProjectName}
ode_modules
ode-sass\vendor\win32-ia32-47\binding.node
Node Sass could not find a binding for your current environment: Windows 32-bit with Node.js 5.x
Found bindings for the following environments:
   - Windows 64-bit with Node.js 6.x

此处其他答案(npm installnpm rebuild node-sass等)中列出的npm命令均无效。

相反,我必须下载丢失的绑定并将其放在适当的目标文件夹中。

绑定可以在Git上找到。将文件与错误消息中/node_modules/node-sass/vendor/后面标识的文件夹名匹配(在您的情况下为"darwin-x64-11",因此您需要darwin-x64-11_binding.node文件)。

在项目中创建丢失的文件夹(/node_modules/node-sass/vendor/darwin-x64-11,将.node文件复制到新目录,并将其重命名为binding.node

节点sass发布URL:https://github.com/sass/node-sass/releases/发布


为我工作:

只需删除node sass文件夹并运行npm安装。nbsp;


只需执行以下命令:

npm rebuild node-sass --force


在我的情况下,它也找不到Python

以下过程解决了该问题(Windows):

1
2
3
4
5
6
7
8
9
npm rebuild node-sass --force
-- cannot find python.exe, if you have Python installed, add it to your path:
set PYTHON=C:\Python27\Python.exe
-- else: download python"Windows x86-64-MSI" installer from https://www.python.org/downloads/release/python-2714/
-- install python
-- at installation start check: add env variable to path
-- after successfull installation:
npm rebuild node-sass --force
-- finished successfully


我有一个类似的问题,原因是我的机器中安装了两个版本的节点:一个是"全局"的,另一个是项目级的。只有当gulp构建在node.js 4.x版本下运行时,SASS才能正确构建,因此请确保升级所使用的节点版本。

PS:如果完全删除项目中的node_modules文件夹并从头开始重新构建,NPM将下载当前系统和节点版本的正确依赖项。


固定

npm rebuild node-sass --force

或者,如果在容器中使用节点sas:

docker exec npm rebuild node-sass --force

解释

当节点sass没有当前操作系统的正确绑定时,会发生此错误。

根据我的经验,通常在直接将node_modules添加到dockerfile中的容器文件系统(或使用docker卷装载它们)时发生。这是因为容器体系结构通常与当前操作系统不同。例如,我在MacOS上安装了node-sass,但容器运行Ubuntu。

如果强制节点sas从容器中重新生成,则节点sas将下载容器操作系统的正确绑定。

看我的重复案例了解更多。


在某些情况下,您需要卸载和安装节点sass库。尝试:

1
npm uninstall --save node-sass

1
npm install --save node-sass

看看这对我来说是有用的,这里的堆栈链接


尝试添加后缀--force

1
npm rebuild node-sass --force


我在7.4.0版的node current(最新功能)中也遇到了同样的问题。

在这里读了一些东西,把节点降到了V6.9.4LTS,在运行npm rebuild node-sass之后,它下载了二进制文件,一切都开始工作了。

Downloading binary from https://github.com/sass/node-sass/releases/download/v3.13.1/win32-x64-48_binding.node
Download complete .] - :
Binary saved to D:\xxx\xxx-xxx
ode_modules
ode-sass\vendor\win32-x64-48\binding.node
Caching binary to C:\Users\user\AppData
oaming
pm-cache
ode-sass\3.13.1\win32-x64-48_binding.node`


我也有同样的问题

1
2
3
4
5
6
7
8
9
    throw new Error(errors.missingBinary());
    ^

Error: Missing binding /path/to/project/node_modules/node-sass/vendor/linux-x64-47/binding.node
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 5.x

Found bindings for the following environments:
  - Linux 64-bit with Node 0.10.x
  - Linux 64-bit with Node.js 5.x

那是因为我用不同的nodejs版本安装了npm,尝试删除node_modules文件夹安装和启动

1
2
3
4
cd your_proyect
rm -rf node_modules
npm install
npm start or gulp or whatever

如果您正在使用NVM,请执行

1
2
3
4
nvm use stable // or your favorite version
// remove node_module directory
npm install
npm start or gulp or whatever

对于我的特殊情况,上述答案都不起作用。所以它的作用是:

1
2
3
4
5
rm -rf node_modules
rm -rf /tmp/*
rm -rf /root/.npm/node-sass
npm uninstall --save node-sass
npm cache clean --force

npm cache verify检查缓存中是否没有剩余内容

1
npm install

尽管我没有尝试复制这个序列,但这是上面的组合。此外,您还可以尝试:

npm install --save node-sassnpm install node-sass -g

1
2
npm rebuild node-sass
npm install bindings

对于Visual Studio 2015/2017,右键单击您的package.json,然后单击恢复包。

这将确保运行来自Visual Studio工具外部工具的NPM,并在此基础上重新生成绑定。


这通常是因为运行npm install后环境发生了变化。运行npm rebuild node-sass为当前环境构建绑定。


只需刷新您的NPM缓存,然后:

1
2
npm cache clean --force  
npm install

在同样的情况下,它总是适用于我。

upd:你的问题也可能是因为没有一个全球性的sasslib。

1
npm install -g sass

如果您看到这个问题或类似的问题,并且正在使用Docker,请回答。

原因:在将当前文件结构复制到Docker容器内部时,您可能正在将节点模块从一个操作系统复制到另一个操作系统(例如,Mac到Linux容器)。

解决方案:

添加一个.dockerignore,内部添加:

node_modules

这将导致npm install为docker环境而不是本地机器环境安装绑定。


我是一个windows 8用户,最近更新了node到v8.11.1和npm到v6.0.0并面临类似的问题。没有任何效果-npm install -g node-sass@latest或从node_modules/项目中删除node-sass目录-他们都没有为我工作。

LaravelMix向我的浏览器控制台抛出了一个错误,说一个丢失的节点:win32-x64-57。我不知道是因为网速慢还是其他原因,更新过程中节点丢失了。

因此,一些答案指导我查看节点sass版本,我找到了解决方案。

  • 步骤1:使用命令:npm view node-sass version(步骤4中的{your version})检查节点sass版本。
  • 步骤2:获取节点sass版本
  • 步骤3:获取您的版本,并在每个版本下列出的资产中找到丢失的节点,然后下载该文件
  • 第四步:进入电脑的C:\Users\{User}\AppData
    oaming
    pm-cache
    ode-sass\{your version}\
    文件,将下载的.node文件放在版本文件夹中。
  • 你就完了。

    在我的例子中,节点sass版本是4.9.0,丢失的节点是win32-x64-57_binding.node,所以我从4.9.0版本下载了.node文件,并遵循步骤4。


    创建aspnetcore应用程序时,我在Visual Studio 2015 Community Edition中遇到的类似错误是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Node Sass could not find a binding for your current environment: Windows 32-bit with Node.js 5.x
    Found bindings for the following environments:
      - Windows 64-bit with Node.js 6.x
    This usually happens because your environment has changed since running `npm install`.
    Run `npm rebuild node-sass` to build the binding for your current environment.
        at module.exports ([..]
    ode_modules
    ode-sass\lib\binding.js:15:13)
        at Object. ([..]
    ode_modules
    ode-sass\lib\index.js:14:35)
        at Module._compile (module.js:397:26)
        at Object.Module._extensions..js (module.js:404:10)
        at Module.load (module.js:343:32)
        at Function.Module._load (module.js:300:12)
        at Module.require (module.js:353:17)
        at require (internal/module.js:12:17)
        at Object. ([..]
    ode_modules\gulp-sass\index.js:187:21)
        at Module._compile (module.js:397:26)

    从上面的错误可以看出,原因是nodejs绑定的版本不匹配。

    Node Sass could not find a binding for your current environment:
    Windows 32-bit with Node.js 5.x

    Found bindings for the following environments:
    - Windows 64-bit with Node.js 6.x

    我找到的解决办法是

    • 安装Nodejs Windows版本,
    • 在外部Web工具中添加节点js(c:program filesodejs)的路径(请参阅rob scott的答案)。
    • 将nodejs路径移动到$(path)上方。

    当您在工作站中运行node.js的更新并全局使用node sas时,就会发生这种情况。

    所以应该全局卸载节点sas

    1
    npm uninstall -g node-sass

    然后你必须在全球范围内安装它。

    1
    npm install -g node-sass


    这对我有用删除node_modules,然后从ide恢复包,然后从npm rebuild node-sass恢复包。


    我也有同样的问题。我在这里找不到任何合适的工作解决方案,所以我找到了我的:

    受@rob scott解决方案和其他指出我们可以安装2个版本的node.js的启发,我去了C:\Program Files (x86)
    odejs
    ,发现除了vs默认安装之外,我还安装了node.js版本。

    我的解决方案很简单:

    • 转到工具>选项>项目和解决方案>Web包管理>外部Web工具
    • 点击add an entry(按钮块右上角最左边)
    • 输入C:\Program Files (x86)
      odejs
      ,按enter确认
    • 把它放在名单的最上面
    • 享受

    可能node.js在path变量中设置得不好,但这是我的快速解决方案,我的2美分:)


    没有安装/重建解决方案为我解决了这个问题(使用gulp)。

    以下是我解决问题的方法:

    1)从存储库中下载丢失的绑定文件。

    2)重命名文件binding.node

    3)如果不存在,创建node_modules/node-sass/vendor/darwin-x64-11目录(错误消息路径)。

    4)将绑定文件添加到EDOCX1[4]


    在构建Docker映像并尝试在本地运行时,我遇到了同样的问题。您需要添加一个.dockerignore文件,其中包含以下内容:
    .DS_Store
    .git
    .gitignore
    .idea
    log/*
    target
    tmp
    node_modules
    client/node_modules
    spec/internal/public/assets
    public/assets


    我在从vs 2017专业版升级到企业版时遇到了这个问题

  • 近距离VS
  • 删除节点模块
  • 开放vs
  • 右键单击package.json并选择"restore packages"

  • 我必须先选择新的默认节点版本nvm use ***nvm install ***,然后再删除项目中所有的节点模块和npm i


    节点sass运行安装脚本以下载所需的二进制文件。如果没有设置环境变量、NPMRC变量或流程参数,则使用当前流程平台、体系结构和节点ABI版本来确定二进制文件。因此,如果您在一个应用程序中运行node install,然后尝试在具有不同平台/体系结构/abi的应用程序中运行node sass,则不会下载二进制文件。解决方案是手动下载二进制文件或使用环境变量(sass_binary_name)或.npmrc变量(sass_binary_name)修复二进制文件版本。

    您可以在node sasslibextensions.js的getbinarypath函数中看到此逻辑。


    我只是运行npm rebuild而不是npm rebuild node sass,问题消失了。但我不知道背后的魔力是什么。


    我通过将java_home从x86改为x64来解决这个问题。Maven正在x86上运行,但节点使用的是x64。删除/node和/node_模块,然后重新构建。


    检查您的系统:您的系统是否有2个不同的Node.js安装?

    如果从nodejs安装节点,则默认安装目录为C:\Program Files
    odejs
    我在这里安装了节点版本6.xx。

    检查vs外部Web工具目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Web\External我在那里安装了节点版本5.xx。

    一个解决办法是:

    • 备份C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Web\External目录。
    • 复制C:\Program Files
      odejs
      目录内容和
    • 粘贴成C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Web\External目录。
    • 从解决方案中删除node_modules目录。
    • 重新运行项目。如果收到错误消息,请再次运行该项目。

    如果不行的话

    • 从解决方案中删除node_modules目录。

    注意:$是命令提示

    1
    2
    3
    $  npm install

    $ npm run build:dev

    重新运行项目。


    请记住将xxx.node文件(在我的例子中是win32-x64-51)重命名为binding.node并粘贴到xxx文件夹(在我的例子中是win32-x64-51)。


    对我来说,问题是任务运行者资源管理器的目标是我的项目的解决方案。当我使用任务运行程序资源管理器刷新按钮旁边的下拉列表更改到项目本身时,它显示了相关的任务。


    对于从系统节点切换到NVM的用户,如果没有删除~/.npm~/.node-gyp文件夹,则可能会出现此问题,因为~/.node-gyp中的节点版本可能不同。

    在任何情况下,都应该删除这些文件夹。


    回答@core114,建议卸载和安装sass软件包,对于手动流程再次有效,但对于自动部署/ci/cd,您需要更通用的方法。对于我来说,对于不同环境的ContinuOS部署有效的是:

  • 部署前使用rimraf移除旧的node_modules

    RIMRAF节点模块

  • 更新npm package.json中的sass包并提交源代码管理。

  • 对于下一个部署,它将自动刷新所有环境的SAS。


  • 删除node_modules文件夹。
  • 再次安装依赖项。(NPM I)

  • 打开Visual Studio 2017转到"工具"->"选项"…转到项目和解决方案->Web包管理将$(path)移动到该列表的顶部并关闭该窗口。重新启动Visual Studio。这在我的案例中有效,因为我的节点版本是11.x


    我已经尝试了所有我发现的方法。

    我注意到那个文件夹有一些奇怪的行为。当我试图从vs终端"cd"到"node-sass"文件夹时,它告诉我"找不到文件夹",但在finder中看到。

    即使使用"sudo"命令,vs终端的chmod也找不到文件夹。

    我已经从本地的MacOS终端进行了chmod ed,然后用node重新构建。


    对我来说,是MavenWar插件将过滤器应用于文件并损坏了woff文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <plugin>
    maven-war-plugin</artifactId>
    <configuration>
        <webResources>
            <resource>
                <directory>dist</directory>
                <filtering>true</filtering>
            </resource>
        </webResources>
    </configuration>

    删除true

    或者如果你需要过滤,你可以这样做:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <plugin>
        maven-war-plugin</artifactId>
        <configuration>
            <webResources>
                <resource>
                    <directory>dist</directory>
                    <excludes>
                        <exclude>assets/**/*</exclude>
                    </excludes>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>dist</directory>
                    <includes>
                        <include>assets/**/*</include>
                    </includes>
                </resource>
            </webResources>
        </configuration>
    </plugin>

  • 在node_modules/node sass/vendor/linux-x64-46/中创建一个新目录。
  • 从https://github.com/sass/node-sass/releases下载fil(linux-x64-59_binding.node)基于您的版本。
  • 将其粘贴到nodeu modules/node sass/vendor/linux-x64-46/重命名为binding.node

  • 对于我来说,当我运行npm install时,它审核了安装的包并显示"发现1个高严重性漏洞",并通过运行

    1
    npm audit fix

    做了这个把戏。如果它帮助了某人,则发布。

    更新:共享我的错误日志:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ERROR in ./src/styles.scss (./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss)
    Module build failed (from ./node_modules/sass-loader/lib/loader.js):
    Error: Missing binding ..
    ode_modules
    ode-sass\vendor\win32-x64-57\binding.node
    Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 8.x

    Found bindings for the following environments:
      - Windows 64-bit with Node.js 10.x

    This usually happens because your environment has changed since running `npm install`.
    ....

    它确实要求我

    1
    Run `npm rebuild node-sass` to download the binding for your current environment.


    Mac:

  • -CMD+Shift +G
  • -/usr/local/lib/节点sass
  • -右键单击并重命名:应该仍然是同一个节点sas
  • -然后运行:npm install node sass-g
  • 那是固定的。