導軌版本:7.0.3.1
紅寶石版本:3.1.0p0
反應版本: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時失敗。 - 已洗掉
application.js并僅保留該application.js.map檔案。app/assets/builds/*app/assets/builds/.keep - 嘗試在此處運行命令 -如何解決 Sprockets::DoubleLinkError application.css
應用程式/javascript/application.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"但這只會給出不同的錯誤。
在這一點上,我沒有想法嘗試。我在這里想念什么?謝謝!
uj5u.com熱心網友回復:
我看到的唯一一件事是您在 2 個地方使用 Javascript:app/javascript/applications.js和app/assets/javascript/application.js
好方法是你從app/javascript/application.js(不要注釋掉@hotwired 和刺激控制器,這不是問題出在哪里)
基本上使用 JSBundling 處理 Javascript 的新方法,其中的 application.js 檔案app/javascript/將被捆綁到builds檔案夾中。然后被 Sprockets 抓取進行指紋識別和壓縮。
Sprockets 還將壓縮app/assets/javascript檔案夾中的所有內容并對其進行指紋識別,然后您最終會擁有兩個名稱相同的檔案。
如果您沒有app/assets/javascript檔案夾,那么您的檔案可能有問題app/assets/config/manifest.js。您可能嘗試將app/assets/builds檔案夾和app/javascript檔案夾都傳遞給 sprockets。然后,您最終將捆綁和非捆綁檔案添加到您的應用程式中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503977.html
