javascript Rails7:将第三方JS库包含到非模块的构建中

eyh26e7m  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(87)

在一个新的Rails项目中,我想包含一些下载的库js文件,这些文件已经被缩小了,通常只能通过web项目中包含的script标签来实现。它们不是模块。
我尝试在Rails7中使用importmap特性,但它破坏了库,使其无法运行并抛出异常,因为它不是一个模块。有没有一种方法可以在importmap中包含没有模块系统的(缩小的)库的JS文件,并且不以任何方式 Package 或修改它们?
我让它工作的唯一方法是将JS文件放在public/js/library.js中,并在应用程序布局中添加另一个脚本标记。
但我希望有一个简单的标准方法,包括我的第三方JS在一些指定的目录自动不作为模块,我不需要把每一个到公共和源它在我的应用程序布局。此外,一个选项,把它们放在一个单一的文件(甚至缩小它之后),将是蛋糕上的樱桃。

nkhmeac6

nkhmeac61#

如果在使用 import-mapsimport时库不工作,您仍然可以使用 * sprocket * 指令。

.
├── app/
│   └── assets
│       └── javascripts                       # <= create these
│           └── do_not_name_me_application.js # <=
└── vendor
    ├── javascript
    └── javascripts                           # <=
        ├── goodbye_library.js                # function bye(text) { console.log(text) }
        └── hello_library.js                  # function hi(text) { console.log(text) }
// app/assets/config/manifest.js

//= link do_not_name_me_application.js
# config/initializers/assets.rb

Rails.application.config.assets.paths << Rails.root.join("vendor/javascripts")
// app/assets/javascripts/do_not_name_me_application.js

//= require_directory ../../../vendor/javascripts

hi("loaded non module");
bye("also loaded");
# app/views/layouts/application.html.erb

<%= javascript_include_tag "do_not_name_me_application" %>

试验项目:

>> require "open-uri"
>> puts URI.open("http://localhost:3000/assets/do_not_name_me_application.js").read
function bye(text) { console.log(text) };
function hi(text) { console.log(text) };

hi("loaded non module");
bye("also loaded");

  • https:github.com/rails/sprockets#directives*

相关问题