错误: 在名称空间‘ std’中没有名为‘ move_cv_t’的模板; 您是指‘ move_cv’吗?

我的问题似乎类似于 这个的问题,除了它发生时,我运行的轨道应用程序的 yarn install

当我运行 yarn install时,它会成功运行一段时间

../src/libsass/src/ast.hpp:1614:25: warning: loop variable 'numerator' of type 'const std::__1::basic_string<char>' creates a copy from type 'const std::__1::basic_string<char>' [-Wrange-loop-analysis]
for (const auto numerator : numerators)
^
../src/libsass/src/ast.hpp:1614:14: note: use reference type 'const std::__1::basic_string<char> &' to prevent copying
for (const auto numerator : numerators)
^~~~~~~~~~~~~~~~~~~~~~
&
../src/libsass/src/ast.hpp:1616:25: warning: loop variable 'denominator' of type 'const std::__1::basic_string<char>' creates a copy from type 'const std::__1::basic_string<char>' [-Wrange-loop-analysis]
for (const auto denominator : denominators)
^
../src/libsass/src/ast.hpp:1616:14: note: use reference type 'const std::__1::basic_string<char> &' to prevent copying
for (const auto denominator : denominators)
^~~~~~~~~~~~~~~~~~~~~~~~
&
2 warnings generated.
rm -f Release/sass.a && ./gyp-mac-tool filter-libtool libtool  -static -o Release/sass.a Release/obj.target/libsass/src/libsass/src/ast.o Release/obj.target/libsass/src/libsass/src/ast_fwd_decl.o Release/obj.target/libsass/src/libsass/src/backtrace.o Release/obj.target/libsass/src/libsass/src/base64vlq.o Release/obj.target/libsass/src/libsass/src/bind.o Release/obj.target/libsass/src/libsass/src/cencode.o Release/obj.target/libsass/src/libsass/src/check_nesting.o Release/obj.target/libsass/src/libsass/src/color_maps.o Release/obj.target/libsass/src/libsass/src/constants.o Release/obj.target/libsass/src/libsass/src/context.o Release/obj.target/libsass/src/libsass/src/cssize.o Release/obj.target/libsass/src/libsass/src/emitter.o Release/obj.target/libsass/src/libsass/src/environment.o Release/obj.target/libsass/src/libsass/src/error_handling.o Release/obj.target/libsass/src/libsass/src/eval.o Release/obj.target/libsass/src/libsass/src/expand.o Release/obj.target/libsass/src/libsass/src/extend.o Release/obj.target/libsass/src/libsass/src/file.o Release/obj.target/libsass/src/libsass/src/functions.o Release/obj.target/libsass/src/libsass/src/inspect.o Release/obj.target/libsass/src/libsass/src/json.o Release/obj.target/libsass/src/libsass/src/lexer.o Release/obj.target/libsass/src/libsass/src/listize.o Release/obj.target/libsass/src/libsass/src/memory/SharedPtr.o Release/obj.target/libsass/src/libsass/src/node.o Release/obj.target/libsass/src/libsass/src/operators.o Release/obj.target/libsass/src/libsass/src/output.o Release/obj.target/libsass/src/libsass/src/parser.o Release/obj.target/libsass/src/libsass/src/plugins.o Release/obj.target/libsass/src/libsass/src/position.o Release/obj.target/libsass/src/libsass/src/prelexer.o Release/obj.target/libsass/src/libsass/src/remove_placeholders.o Release/obj.target/libsass/src/libsass/src/sass.o Release/obj.target/libsass/src/libsass/src/sass2scss.o Release/obj.target/libsass/src/libsass/src/sass_context.o Release/obj.target/libsass/src/libsass/src/sass_functions.o Release/obj.target/libsass/src/libsass/src/sass_util.o Release/obj.target/libsass/src/libsass/src/sass_values.o Release/obj.target/libsass/src/libsass/src/source_map.o Release/obj.target/libsass/src/libsass/src/subset_map.o Release/obj.target/libsass/src/libsass/src/to_c.o Release/obj.target/libsass/src/libsass/src/to_value.o Release/obj.target/libsass/src/libsass/src/units.o Release/obj.target/libsass/src/libsass/src/utf8_string.o Release/obj.target/libsass/src/libsass/src/util.o Release/obj.target/libsass/src/libsass/src/values.o
c++ '-DNODE_GYP_MODULE_NAME=binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/st/.node-gyp/16.0.0/include/node -I/Users/st/.node-gyp/16.0.0/src -I/Users/st/.node-gyp/16.0.0/deps/openssl/config -I/Users/st/.node-gyp/16.0.0/deps/openssl/openssl/include -I/Users/st/.node-gyp/16.0.0/deps/uv/include -I/Users/st/.node-gyp/16.0.0/deps/zlib -I/Users/st/.node-gyp/16.0.0/deps/v8/include -I../../nan -I../src/libsass/include  -O3 -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=c++11 -stdlib=libc++ -fno-rtti -fno-exceptions -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/src/binding.o.d.raw   -c -o Release/obj.target/binding/src/binding.o ../src/binding.cpp
In file included from ../src/binding.cpp:1:
In file included from ../../nan/nan.h:56:
In file included from /Users/st/.node-gyp/16.0.0/include/node/node.h:63:
In file included from /Users/st/.node-gyp/16.0.0/include/node/v8.h:30:
/Users/st/.node-gyp/16.0.0/include/node/v8-internal.h:452:38: error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?
!std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);
~~~~~^~~~~~~~~~~
remove_cv
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:697:50: note: 'remove_cv' declared here
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_cv
^
1 error generated.
make: *** [Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/st/rails/myapp/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:365:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
gyp ERR! System Darwin 20.3.0
gyp ERR! command "/usr/local/Cellar/node/16.0.0/bin/node" "/Users/st/rails/myapp/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/st/rails/myapp/node_modules/node-sass
gyp ERR! node -v v16.0.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok

有什么办法可以解决这个问题吗? (我甚至不确定这是否是 xcode/node/ails/c + + 的问题)

其他注释

  • /usr/bin/xcodebuild -version返回
Xcode 12.4
Build version 12D4e
  • cpp --version返回
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

请注意: 我不用 cpp 编写代码,所以对于如何解决这个问题,我只有很少的上下文知识。

77920 次浏览

我试图看到我目前的版本与 cpp --version

cpp --version Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

编译器版本不是 C + + 标准版本。

前者是工具的版本,后者是 C + + 标准的版本。

最近所有主流的 C + + 编译器(我知道)都支持多个 C + + 标准。

如果可移植的(符合标准的)代码应该与特定的编译器无关,那么 C + + 标准就很重要。这允许为多个平台开发由不同编译器编译的代码。它还有助于提高开发质量——一个供应商的编译器可能会漏掉代码中的一个弱点(例如被容忍) ,另一个供应商可能会抱怨这个弱点。

在编译器中明确选择 C + + 标准也很重要:

  • 编译器最新支持的标准可能仍处于实验状态。
  • 开发人员可能会针对某种(较老的)标准进行开发(以便与其他平台保持兼容,因为这些平台尚不支持最新的 C + + 标准) ,并希望确保不会有新的内容出现。

具有特定编译器版本的编译器通常默认使用特定的 C + + 标准。(哪一个是可以在文件中找到的。或在网上。)然而,这并不一定是最新支持的 C + + 标准。

C + + 标准的显式选择可以通过命令行参数完成:

  • G + + 和 clang: -std=(可能还有其他供应商的编译器)
  • MSVC: /std:.

例如,g++ -std=c++14调用 G + + 强制使用 C + + 14标准。

对于所有编译器/供应商来说,这个命令行参数并不完全相同,这有点令人遗憾。因此,在所使用的构建工具中定义所需的 C + + 标准更为方便。(构建的工具将根据找到/使用的编译器选择适当的命令行参数。)

对于 CMake (我在日常工作中使用) ,这是

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

(对于边角情况,可能需要额外的设置,因为我曾经痛苦地发现: SO: 作为静态成员指向成员变量的指针。)

OP 使用 纱线,我承认以前从未听说过。

他说 yarn install -std=c++17解决了他的问题。(我试图找到某种医生。但是我失败了。)

更新-简单修复!

这里有一个简单的解决方法,可以让您继续使用节点16。

  1. 删除 yarn.lock
  2. 打开 package.json并确保您使用 webpacker 版本 5.4.3(这是最新版本-它不会拉入旧版本的节点-sass,导致这个问题)
  3. 运行 yarn install
  4. 启动您的 Rails 服务器,一切应该恢复正常!

下面是之前的答案,长得多(如果还有用的话) :

Node-sass 还不能与节点 v16兼容

为了解决这个问题,将 node (例如 第14版)降级,直到 node-sass 与 v16兼容。要使用 nvm 降级节点,只需运行:

nvm install 14

通过 跑步全局设置版本14(因此每个新的终端窗口默认为节点版本14) :

nvm alias default 14

现在您已经安装了节点14,并将其设置为默认值! . . 现在您只需要让您的应用程序使用 v14。


如何让你的 Rails 应用程序使用节点14

安装节点14(参见上文)。打开终端,前往应用程序的根目录,然后:

  1. 如果 Rails 服务器正在运行,请停止它
  2. 打开一个新的终端窗口(使 node --version返回 14.x(而不是16)
  3. 运行 spring stop
  4. 删除 yarn.lock
  5. rm -rf node_modules删除现有的节点模块
  6. 检查 node --version返回14。如果它没有再次运行 nvm install 14
  7. 现在用 yarn install重新安装模块(如果节点14没有纱线,用 npm install --global yarn安装)
  8. 它应该成功!
  9. 重新启动您的 Rails 服务器,它将工作!

如果你有这个问题特别是 在 Heroku,尝试也确保你的 Webpacker 是最新的:

yarn upgrade @rails/webpacker --latest

也许不能直接回答这个问题,但是我在调试 TravisCI 中失败的构建时遇到了这个问题,并且导致我推动了相当多的提交来修复。对我来说,几天前是由 节点16被释放的事实引起的。我注意到我在 before _ script 中使用了 nvm install node,它总是默认为最新的,而不是 nvm install,它实际上遵循 .nvmrc中指定的版本。虽然使用旧版本的东西不是一个长期的解决方案; yarn install -std=c++14对我来说已经失败了。

与@murb 类似,前几天我在构建框中运行了一个酿造更新,发现安装了节点16。将它放回到节点12为我修复了这个问题,直到我可以更新我的整个构建系统,以便与更新版本的节点正常工作。

更新 : 因为 Node-sass 版本6.0.1,所以支持 Node 16。


您看到的是在编译 node-sass 时出现的错误。这是一个处理 Sass/SCSS 样式的包,它是用 C + + 编写的,只重新打包为 JavaScript 库。它是用 C + + 编写的,这意味着它需要在安装期间在设备上进行编译(这是通过一个名为 node-gyp 的工具在内部完成的,您也可以在错误输出中找到它)。

问题是 Node-sass 不支持 Node 16在写这个答案的时候,参见跟踪问题: https://github.com/sass/node-sass/issues/3077没有估计它什么时候会支持它(这是公平的,因为它是一个志愿者驱动的项目)。即使您设法在 Node16上安装 Node-sass,我也建议您不要这样做,因为这种行为可能是未定义的。

正确的解决方案是 将 Node 安装降级到受支持的版本(我可以看到14和15在他们的 CI 测试)。如果你克隆了一个项目,它不会安装在你的机器上,但是可以为你的同事或者生产服务器工作,那么很可能这个项目也有不同版本的 Node,而且没有在 Node 16上测试,所以我建议不要在 Node 16上开发它。如果这个项目在几天前对你有效,但是现在不起作用了,那么很有可能你最近升级了你的系统设置(例如 Homebrew) ,它将你升级到 Node 16(这就是发生在我身上的事情以及我是如何发现这个问题的)。

您应该与项目的作者核对它运行的 Node 的生产服务器版本,并在本地安装该版本。作为一个最佳实践,在将来,保持产品版本和本地版本的 Node (以及纱线或 npm)同步。为了管理多个 Node 版本,可以使用此工具 https://github.com/nvm-sh/nvm

升级到最近发布的 增加了对节点16的支持的 node-sass@6

我对 Node16也有同样的问题。降级到 Node14对我来说很好。 这里有一些简单的步骤告诉你如何做到这一点(使用自制软件) :

  • 检查当前节点版本

    node -v
    
  • 检查可用的节点版本

    brew search node
    
  • 从当前版本断开链接

    brew unlink node
    
  • 使用以下命令安装所需的版本(例如,版本14)

    brew install node@14
    
  • 将其链接到安装的版本

    brew link node@14
    

最后,使用第一步中的命令确保安装了正确的版本。

返回到使用 node-sass的最新节点 v14 LTS:

brew install node@14
brew unlink node
brew link node@14
node -v
spring stop

在 Rails 项目中运行:

yarn install

PS: 节点16与节点 sass https://github.com/nodejs/node/issues/38367#issuecomment-825461899有一个错误

由于这个问题的一些答案,新版本的 node-sass(v6)已经发布,它通过添加对节点16的支持来修复这个问题。

在我的案例中,Rails 依赖于旧版本的 node-sass,因为我在 package.json(4.3.0)中使用了旧版本的 @rails/webpacker。在得到这个答案的时候,在当前版本 5.4.0之后,将这个版本更新为一个版本,解决了这个问题。

我不知道关于 const auto numerator

但是当我编辑 ~/Library/Caches/node-gyp/16.4.0/include/node/v8-internal.h(您的目录不同)时,如我的终端错误所示,它继续编译而没有错误。

我的解决办法是:

我按照错误消息的指示将 remove_cv_t重命名为 remove_cv

然后开始编译。


在这个临时修复之后,我接下来计划更新 ngxcode。也许它具有错误消息中提示的更新的模板定义

template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_cv

对于苹果 M1芯片来说,工作方式是:

sudo xcode-select --install
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
nvm install v15
nvm cache clear

在我的例子中,我只是将节点从12切换到10:

nvm use 10

我在构建 node-sass时得到了这个错误。

/Users/shahwarkhalid/.node-gyp/16.6.1/include/node/v8-internal.h:488:38: error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?

这次入侵解决了我的问题:

cd /Users/shahwarkhalid/.node-gyp/16.6.1/include/node/

在编辑器中打开 v8-internal.h文件。

在488行上将 remove_cv_t改为 remove_cv

yarn install再次和问题得到解决。

同样的问题,这为我解决了:

CXXFLAGS="--std=c++17" yarn install

试试这个:

export CXXFLAGS="--std=c++17" && npm install