只在生产环境中导入不使用预编译JavaScript资源的映射(Rails 7)



有谁能理解Rails 7中的importmaps吗?我有一个抓耳挠腮。

如果我在开发中运行./bin/importmap json,我得到这个(如预期的):

{
"imports": {
"application": "/assets/application-a7fd3fc58be844f89656edec1ec73e18f9ab627e54b2aea67a97aad4613b6305.js",
"@hotwired/turbo-rails": "/assets/turbo.min-96cbf52c71021ba210235aaeec4720012d2c1df7d2dab3770cfa49eea3bb09da.js",
"@hotwired/stimulus": "/assets/stimulus.min-900648768bd96f3faeba359cf33c1bd01ca424ca4d2d05f36a5d8345112ae93c.js",
"@hotwired/stimulus-loading": "/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js",
"stimulus": "https://ga.jspm.io/npm:stimulus@2.0.0/dist/stimulus.umd.js",
"stimulus-use": "https://ga.jspm.io/npm:stimulus-use@0.41.0/dist/index.js",
"hotkeys-js": "https://ga.jspm.io/npm:hotkeys-js@3.8.8/dist/hotkeys.esm.js",
"trix": "/assets/trix-1563ff9c10f74e143b3ded40a8458497eaf2f87a648a5cbbfebdb7dec3447a5e.js",
"@rails/actiontext": "/assets/actiontext-28c61f5197c204db043317a8f8826a87ab31495b741f854d307ca36122deefce.js"
}
}

…我所有的JavaScript工作正常。

但是,如果在生产环境中运行相同的命令,将得到以下结果:

{
"imports": {
"application": "/application.js",
"@hotwired/turbo-rails": "/turbo.min.js",
"@hotwired/stimulus": "/stimulus.min.js",
"@hotwired/stimulus-loading": "/stimulus-loading.js",
"stimulus": "https://ga.jspm.io/npm:stimulus@2.0.0/dist/stimulus.umd.js",
"stimulus-use": "https://ga.jspm.io/npm:stimulus-use@0.41.0/dist/index.js",
"hotkeys-js": "https://ga.jspm.io/npm:hotkeys-js@3.8.8/dist/hotkeys.esm.js",
"trix": "/trix.js",
"@rails/actiontext": "/actiontext.js"
}
}

…没有什么(JavaScript)工作,因为请求/application.js返回404,虽然奇怪的是,我可以看到资产编译到指纹文件在/assets目录下部署-它只是然后应用程序试图使用原始脚本,其中(在app/javascript目录)不为应用程序服务。

fww,我使用render.com进行部署(尽管同样的问题发生在Heroku)。构建脚本如下:

#!/usr/bin/env bash
# exit on error
set -o errexit
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate

和我的作品。我有以下(根据渲染文档):

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?

…Which(在生产中)的计算结果为true。任何想法吗?

遇到了与您类似的问题,考虑到您像我一样来自较旧的rails版本(可能试图使用包管理器或js- bundle),您可能在某处有此配置

# REMOVE THIS
Rails.application.config.assets.paths << Rails.root.join('app', 'javascript', 'controllers')

删除这个修复了我的问题。我猜这在某种程度上与importmap试图做的事情混淆了。

最新更新