heroku Sprockets::DoubleLinkError -无法链接具有相同输出路径的多个文件(“application.js”)

n1bvdmb6  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(163)

导轨版本:7.0.3.1
Ruby版本:3.1.0p0
React版本:18.2.0
我正在尝试将React添加到我现有的Rails应用程序中,并按照此处的教程进行操作-https://medium.com/rd-shipit/how-to-set-up-a-rails-7-project-with-react-and-jest-f2e016bfbdf3由于我已经有了一个现有的Rails应用程序,因此我按照此处的说明安装了esbuild-https://github.com/rails/jsbundling-rails

Run ./bin/bundle add jsbundling-rails
Run ./bin/rails javascript:install:[esbuild|rollup|webpack]

但是,当我尝试在本地运行应用程序时,它失败了,并显示

$ esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=assets
remote:
remote:          app/assets/builds/application.js      1014.9kb
remote:          app/assets/builds/application.js.map     1.6mb
remote:
remote:        Done in 0.17s.
remote:        W, [2022-08-30T02:32:56.872963 #271]  WARN -- : Removed sourceMappingURL comment for missing asset 'assets/application.js.map' from /tmp/build_54e3859f/app/assets/builds/application.js
remote:        rake aborted!
remote:        Sprockets::DoubleLinkError: Multiple files with the same output path cannot be linked ("application.js")
remote:        In "/tmp/build_54e3859f/app/assets/config/manifest.js" these files were linked:
remote:          - /tmp/build_54e3859f/app/javascript/application.js
remote:          - /tmp/build_54e3859f/app/assets/builds/application.js

我对整个前端工作非常陌生,以前从未在前端工作过。我只是在学习所有这些信息,所以我很困在这里,因为我尝试了很多东西都没有成功。老实说,我不明白很多东西。我尝试过的东西有:

  • app/javascript/application.js重新命名为app/javascript/application2.js。这在本机上可以运作,但当我推入heroku时失败。
  • 删除了app/assets/builds/*中的application.jsapplication.js.map,仅保留了app/assets/builds/.keep文件。
  • 已尝试在此处运行命令-How to resolve Sprockets::DoubleLinkError application.css

应用程序/javascript/应用程序.js:

// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
// import "@hotwired/turbo-rails"
// import "controllers"
import "./react/src/index.js"

我试过取消对import "@hotwired/turbo-rails"import "controllers"的注解,但这只是给出了不同的错误。
我已经没有办法了。我错过了什么?谢谢!

q9rjltbz

q9rjltbz1#

我看到的唯一一件事是,您正在从2个地方使用Javascript:app/javascript/applications.jsapp/assets/javascript/application.js
好的方法是从app/javascript/application.js开始(不要注解@hotwired和刺激控制器,这不是问题的来源)
基本上,通过JSBundling处理Javascript的新方法,app/javascript/中的application.js文件将被捆绑到builds文件夹中。然后由Sprockets抓取,进行指纹识别和压缩。
链轮也将压缩和指纹的一切从app/assets/javascript文件夹,然后你最终有两个文件命名相同。
如果你没有app/assets/javascript文件夹,那么你的app/assets/config/manifest.js文件可能有问题。你可能试图将app/assets/builds文件夹和app/javascript文件夹都传递给链轮。然后你最终将捆绑和未捆绑的文件都添加到你的应用程序中。

相关问题