纱线安装说是最新的,但无法启动 Rails 控制台

Posted

技术标签:

【中文标题】纱线安装说是最新的,但无法启动 Rails 控制台【英文标题】:Yarn install says up to date, yet can't start rails console 【发布时间】:2018-09-11 15:01:15 【问题描述】:

我一直在使用 Webpack、Vue.js 和 Rails 开发应用程序。两个月没有问题,但是当我尝试启动 rails 控制台时,rails cyarn 抱怨包过期:

error An unexpected error occurred: "Unknown language key integrityNodeDoesntMatch".
info If you think this is a bug, please open a bug report with the information provided in "/Users/maksimfedotov/vras/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.


========================================
  Your Yarn packages are out of date!
  Please run `yarn install` to update.
========================================

然而当我运行yarn install:

yarn install v1.3.2
[1/4] ????  Resolving packages...
success Already up-to-date.
✨  Done in 0.71s.

我一直在查看 yarn 和 webpacker 文档,尝试了各种 yarn 清理命令,但没有运气。

有趣的是,我仍然可以运行服务器,它是唯一一个抱怨的控制台。

【问题讨论】:

您是否尝试删除yarn.lock 并再次运行yarn install 你尝试过 yarn update 吗? 我也没有尝试过,但是这个问题就消失了。不知道发生了什么... 我在运行 rails crails g ... 时遇到了同样的问题。删除 node_modules 和 yarn.lock 没有帮助 请记住在每次配置更改后和删除任何内容之前尝试spring stop 作为简单修复。 【参考方案1】:

这是一个老问题,已经解决了,所以我写下我最后做了什么:

只需删除node_modules 通常即可解决问题。如果您使用的是 spring,它也可能会搞砸,因此请考虑运行 DISABLE_SPRING=1 rails s 看看是否有帮助

【讨论】:

删除 node_modules 对我没有用,但禁用 spring 可以。有没有办法让 spring 和 webpacker 一起玩得很好?【参考方案2】:

尝试通过运行 spring stop 重新启动 spring。

这为我解决了这个问题,意味着我不需要经常在命令前加上 spring disable 标志。

上面的命令停止spring:要检查它是否自动重启,运行spring status

感谢this comment on GitHub 提供解决方案!

【讨论】:

【参考方案3】:

您可以添加config/environments/development.rb

此配置设置

config.webpacker.check_yarn_integrity = false

它也忘记在每个 Rails 调用中检查纱线的完整性,如迁移、启动控制台...、在开发环境中

【讨论】:

【参考方案4】:

由于 node-sass 和 node 版本 16 之间的兼容性问题,此问题在 2021 年 4 月再次出现。(I had similar problems here 并提供与以下here 类似的答案。

所以我的解决方案是降级节点,直到版本 16 完全兼容。

使用nvm install 14 安装节点14,然后使用nvm alias default 14 将其设置为全局默认值。

然后:

    如果 Rails 服务器正在运行,请停止它 打开一个全新的终端窗口(以便 node --version 返回 14.x(不是 16) 运行spring stop 删除yarn.lock 使用rm -rf node_modules 删除现有节点模块 检查node --version 是否返回14。如果它没有再次运行nvm install 14。 现在用yarn install重新安装模块(如果你没有节点14的纱线,用npm install --global yarn安装它) 应该会成功! 重启你的 Rails 服务器,它就可以工作了!

其他有用的信息:

This github 问题 - 特别是this comment

【讨论】:

我唯一要补充的是,作为可能的额外内容,使用 .nvmrc 并添加版本 @BenKoshy 我可能应该更新这个,因为我认为 node-sass 库已经更正了,所以现在可以使用最新的 node 版本(虽然我在推测)【参考方案5】:

试试yarn install,然后再试试rails c

【讨论】:

【参考方案6】:

如果您正在切换更改 yarn.lock 的分支,并且只想运行 rails 控制台而不必在每次切换时继续运行 yarn install,您可以将其添加到您的 app/config/development.rb

config.webpacker.check_yarn_integrity = ENV['SKIP_YARN'].nil?

那么当 Rails 抱怨时,你可以简单地这样做

SKIP_YARN=true rails c

【讨论】:

【参考方案7】:

就我而言,这解决了问题。

rm -rf yarn.lock
yarn install

【讨论】:

【参考方案8】:

试试这个:NODE_ENV=development yarn install

【讨论】:

以上是关于纱线安装说是最新的,但无法启动 Rails 控制台的主要内容,如果未能解决你的问题,请参考以下文章

Docker未安装纱线

Rails 6 无法导入纱线依赖项:未捕获错误:模块解析失败:意外字符“#”(1:0)

在 Docker 中运行 Rails 应用程序时,纱线包已过期

Expo CLI 通过纱线安装,但无法正常工作

纱线安装因 node-sass / node-modules 失败

纱线安装命令时出现 ESOCKETTIMEDOUT 错误