importmap-rails 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/app/helpers/importmap/importmap_tags_helper.rb +4 -4
- data/lib/importmap/engine.rb +9 -4
- data/lib/importmap/{paths.rb → map.rb} +12 -9
- data/lib/importmap/version.rb +1 -1
- data/lib/install/install.rb +13 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d90db013f0d628f59edd7b9b17892aae92033dea65298c03351d1ae75b9a782a
|
4
|
+
data.tar.gz: 3d8212059da5f5e4dc1ca241385132633dd7e6bd1a700087af8a18e38ae62456
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f0b4a69a02f52d8a20be1235dadda2b9412b76677ef4897558822ed0244c5226428930891386bf830ac0fa93887ecaa71e3a4a69000afad926462bee2b9fc2b
|
7
|
+
data.tar.gz: 4c9da92a7e433445db8d9ea9b1db049996eb0b3943a229163985d0b17b6e31f7d5b0fc5fc013104330511d3d473c976fc3d4751a8b4ccfbbaad6644fac75b690
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Note: In order to use JavaScript from Rails frameworks like Action Cable, Action
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
The import map is configured programmatically through the `Rails.application.config.importmap
|
23
|
+
The import map is configured programmatically through the `Rails.application.config.importmap` assignment, which by default is setup in `config/initializers/assets.rb` after running the installer. (Note that since this is a config initializer, you must restart your development server after making any changes.)
|
24
24
|
|
25
25
|
This programmatically configured import map is inlined in the `<head>` of your application layout using `<%= javascript_importmap_tags %>`, which will setup the JSON configuration inside a `<script type="importmap">` tag. After that, the [es-module-shim](https://github.com/guybedford/es-module-shims) is loaded, and then finally the application entrypoint is imported via `<script type="module">import "application"</script>`. That logical entrypoint, `application`, is mapped in the importmap script tag to the file `app/assets/javascripts/application.js`, which is copied and digested by the asset pipeline.
|
26
26
|
|
@@ -44,9 +44,9 @@ import "@hotwired/stimulus-autoloader"
|
|
44
44
|
Instead of mapping JavaScript modules to files in your application's path, you can also reference them directly from JavaScript CDNs like Skypack. Simply add them to the `config/initializers/assets.rb` with the URL instead of the local path:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
Rails.application.config.importmap.
|
48
|
-
|
49
|
-
|
47
|
+
Rails.application.config.importmap.draw do
|
48
|
+
pin "trix", to: "https://cdn.skypack.dev/trix"
|
49
|
+
pin "md5", to: "https://cdn.skypack.dev/md5"
|
50
50
|
end
|
51
51
|
```
|
52
52
|
|
@@ -8,10 +8,10 @@ module Importmap::ImportmapTagsHelper
|
|
8
8
|
], "\n"
|
9
9
|
end
|
10
10
|
|
11
|
-
# Generate an inline importmap tag using the passed `
|
12
|
-
# By default, `Rails.application.config.importmap
|
13
|
-
def javascript_inline_importmap_tag(
|
14
|
-
tag.script(
|
11
|
+
# Generate an inline importmap tag using the passed `importmap` object to produce the JSON map.
|
12
|
+
# By default, `Rails.application.config.importmap` is used for this object.
|
13
|
+
def javascript_inline_importmap_tag(importmap = Rails.application.config.importmap)
|
14
|
+
tag.script(importmap.to_json(self).html_safe, type: "importmap", "data-turbo-track": "reload")
|
15
15
|
end
|
16
16
|
|
17
17
|
# Include the es-module-shim needed to make importmaps work in browsers without native support (like Firefox + Safari).
|
data/lib/importmap/engine.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
-
require "importmap/
|
1
|
+
require "importmap/map"
|
2
2
|
|
3
3
|
module Importmap
|
4
4
|
class Engine < ::Rails::Engine
|
5
|
-
config.importmap =
|
6
|
-
config.importmap.paths = Importmap::Paths.new.tap { |paths| paths.assets_in "app/assets/javascripts" }
|
5
|
+
config.importmap = Importmap::Map.new
|
7
6
|
|
8
7
|
config.autoload_once_paths = %W( #{root}/app/helpers )
|
9
8
|
|
10
9
|
initializer "importmap.assets" do
|
11
10
|
if Rails.application.config.respond_to?(:assets)
|
12
|
-
Rails.application.config.assets.precompile += %w( es-module-shims )
|
11
|
+
Rails.application.config.assets.precompile += %w( es-module-shims.js )
|
13
12
|
end
|
14
13
|
end
|
15
14
|
|
@@ -18,5 +17,11 @@ module Importmap
|
|
18
17
|
helper Importmap::ImportmapTagsHelper
|
19
18
|
end
|
20
19
|
end
|
20
|
+
|
21
|
+
initializer "importmap.map" do
|
22
|
+
Rails.application.config.to_prepare do
|
23
|
+
load Rails.root.join("config/importmap.rb")
|
24
|
+
end
|
25
|
+
end
|
21
26
|
end
|
22
27
|
end
|
@@ -1,30 +1,33 @@
|
|
1
|
-
class Importmap::
|
1
|
+
class Importmap::Map
|
2
2
|
attr_reader :files, :directories
|
3
3
|
|
4
4
|
def initialize
|
5
|
-
@files = {}
|
6
|
-
@directories = {}
|
5
|
+
@files, @directories = {}, {}
|
7
6
|
end
|
8
7
|
|
9
|
-
def
|
10
|
-
|
8
|
+
def draw(&block)
|
9
|
+
instance_eval(&block)
|
11
10
|
end
|
12
11
|
|
13
|
-
def
|
12
|
+
def pin(name, to:)
|
13
|
+
@files[name] = to
|
14
|
+
end
|
15
|
+
|
16
|
+
def pin_all_from(path, append_base_path: false)
|
14
17
|
@directories[path] = append_base_path
|
15
18
|
end
|
16
19
|
|
17
20
|
def to_json(resolver)
|
18
|
-
{ "imports" =>
|
21
|
+
{ "imports" => resolve_asset_paths(resolver) }.to_json
|
19
22
|
end
|
20
23
|
|
21
24
|
private
|
22
|
-
def
|
25
|
+
def resolve_asset_paths(resolver)
|
23
26
|
expanded_files_and_directories.transform_values do |path|
|
24
27
|
begin
|
25
28
|
resolver.asset_path(path)
|
26
29
|
rescue Sprockets::Rails::Helper::AssetNotFound
|
27
|
-
Rails.logger.warn "Importmap skipped missing
|
30
|
+
Rails.logger.warn "Importmap skipped missing path: #{path}"
|
28
31
|
nil
|
29
32
|
end
|
30
33
|
end.compact
|
data/lib/importmap/version.rb
CHANGED
data/lib/install/install.rb
CHANGED
@@ -23,22 +23,25 @@ append_to_file Rails.root.join("app/assets/config/manifest.js"), %(//= link_tree
|
|
23
23
|
say "Configure importmap paths in config/initializers/assets.rb"
|
24
24
|
append_to_file Rails.root.join("config/initializers/assets.rb") do <<-RUBY
|
25
25
|
|
26
|
-
# Configure import map
|
27
|
-
Rails.application.config.importmap.
|
26
|
+
# Configure import map to be used for ESM
|
27
|
+
Rails.application.config.importmap.draw do
|
28
|
+
# All JavaScript files in the tree are mapped to their name
|
29
|
+
pin_all_from "app/assets/javascripts"
|
30
|
+
|
28
31
|
# Match libraries with their NPM package names for possibility of later porting.
|
29
32
|
# Ensure that libraries listed in the path have been linked in the asset pipeline manifest or precompiled.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
pin "@rails/actioncable", to: "actioncable.esm.js"
|
34
|
+
pin "@rails/activestorage", to: "activestorage.esm.js"
|
35
|
+
pin "@rails/actiontext", to: "actiontext.js"
|
36
|
+
pin "trix", to: "trix.js"
|
34
37
|
|
35
38
|
# Use libraries directly from JavaScript CDNs
|
36
|
-
#
|
37
|
-
#
|
39
|
+
# pin "vue", to: "https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.esm.browser.js"
|
40
|
+
# pin "d3", to: "https://cdn.skypack.dev/pin/d3@v7.0.0-03vFl9bie0TSesDkWTJV/mode=imports/optimized/d3.js"
|
38
41
|
|
39
|
-
#
|
42
|
+
# Pin vendored modules by first adding the following to app/assets/config/manifest.js:
|
40
43
|
# //= link_tree ../../../vendor/assets/javascripts .js
|
41
|
-
#
|
44
|
+
# pin_all_from "vendor/assets/javascripts"
|
42
45
|
end
|
43
46
|
RUBY
|
44
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: importmap-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -38,7 +38,7 @@ files:
|
|
38
38
|
- app/helpers/importmap/importmap_tags_helper.rb
|
39
39
|
- lib/importmap-rails.rb
|
40
40
|
- lib/importmap/engine.rb
|
41
|
-
- lib/importmap/
|
41
|
+
- lib/importmap/map.rb
|
42
42
|
- lib/importmap/version.rb
|
43
43
|
- lib/install/install.rb
|
44
44
|
- lib/shim.js
|