webpack_native 0.3.8 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 106764bed850e280fc8124549ee48e5e0d2cf044a9e2b9ad4c7c256cb82fb808
4
- data.tar.gz: '0045587649638eeac8007613792e9d9142ca368028fd7fef8bec93560ea1fd57'
3
+ metadata.gz: 7de7af5462dbfb7dca5f49cf88f7ff38c74839b978e2a22f9c0cbcd43fde38a2
4
+ data.tar.gz: 8cb00e2fe1480de8b395fbc7defc74aaf7b4a2907ed581a7e0b3b1427349734d
5
5
  SHA512:
6
- metadata.gz: 20199e5da455d3591df950a003730d397705cbc45d14d8978bc454514a3ac9edbceaae76471d38f1f6e3980d29ec825752f1dc56e7a159d8379b38d8982edd84
7
- data.tar.gz: 512655098fb41be3ad09ce54261fa6186ae4456d5d6379dc04856ed9c6253d7abc796ef2ff21c7731cc3a3ab2e638fe5ad1ebca9ef170dc7953ef6783bc0c2ce
6
+ metadata.gz: dfdd2efc49ba5bde50842dd4a88792189408007ee8330e8f1d89217f39a14775cad8a3d7bc242962d9b41be3b3b7f42b00bcb3deb173c449b77c51ea6466131b
7
+ data.tar.gz: 430c6ed6d0eb694fe0c402a2ac9c871332d27c06d08e542cd387ea598176bc2d06d043d014c84598c2e300851334621eaffcb25841f7b468de1325cedc4fe1a3
@@ -19,9 +19,9 @@ class WebpackNative::InstallGenerator < Rails::Generators::Base
19
19
  def inject_stylesheets_and_javascript_tags
20
20
  application_layout = "#{Rails.root}/app/views/layouts/application.html.erb"
21
21
 
22
- stylesheets_tag = "<%= webpack_stylesheet_url 'application', media: 'all', 'data-turbolinks-track': 'reload' %>"
22
+ stylesheets_tag = "<%= webpack_stylesheet_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>"
23
23
 
24
- javascripts_tag = "<%= webpack_javascript_url 'application', 'data-turbolinks-track': 'reload' %>"
24
+ javascripts_tag = "<%= webpack_javascript_tag 'application', 'data-turbolinks-track': 'reload' %>"
25
25
 
26
26
  inject_into_file application_layout, "\n\t\t#{stylesheets_tag}\n\t\t#{javascripts_tag}\n", :before => '</head>'
27
27
  end
@@ -15,7 +15,9 @@
15
15
  "@babel/preset-env": "^7.11.5",
16
16
  "autoprefixer": "^10.0.0",
17
17
  "babel-loader": "^8.1.0",
18
+ "@gfx/zopfli": "^1.0.15",
18
19
  "clean-webpack-plugin": "^3.0.0",
20
+ "compression-webpack-plugin": "^6.0.3",
19
21
  "css-loader": "^4.3.0",
20
22
  "file-loader": "^6.1.0",
21
23
  "mini-css-extract-plugin": "^0.11.2",
@@ -3,6 +3,8 @@ const MiniCssExtractPlugin = require("mini-css-extract-plugin");
3
3
  const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
4
4
  const TerserJSPlugin = require('terser-webpack-plugin');
5
5
  const { CleanWebpackPlugin } = require('clean-webpack-plugin');
6
+ const CompressionPlugin = require('compression-webpack-plugin');
7
+ const zopfli = require('@gfx/zopfli');
6
8
  const WebpackManifestPlugin = require('webpack-manifest-plugin');
7
9
  const webpack = require('webpack');
8
10
 
@@ -12,7 +14,7 @@ module.exports = (env, options) => {
12
14
 
13
15
  return {
14
16
 
15
- devtool: "cheap-module-eval-source-map",
17
+ devtool: devMode ? "cheap-module-eval-source-map" : undefined,
16
18
  optimization: {
17
19
  minimizer: [
18
20
  new TerserJSPlugin({}),
@@ -60,7 +62,7 @@ module.exports = (env, options) => {
60
62
  {
61
63
  loader: 'url-loader',
62
64
  options: {
63
- limit: 8192,
65
+ limit: false,
64
66
  name: devMode ? '[name].[ext]' : '[name]-[hash:7].[ext]'
65
67
  },
66
68
  },
@@ -78,8 +80,32 @@ module.exports = (env, options) => {
78
80
  new CleanWebpackPlugin(),
79
81
  new MiniCssExtractPlugin({
80
82
  filename: devMode ? '[name].css' : '[name]-[contenthash].css',
83
+ }),
84
+ // In production, compress static files to .gz (using zopfli) and .br (using brotli) format
85
+ !devMode && new CompressionPlugin({
86
+ filename: '[path][base].gz[query]',
87
+ compressionOptions: {
88
+ numiterations: 15
89
+ },
90
+ algorithm(input, compressionOptions, callback) {
91
+ return zopfli.gzip(input, compressionOptions, callback);
92
+ },
93
+ test: /\.(js|css|html|svg|ico|eot|ttf|otf|map)$/,
94
+ threshold: 10240,
95
+ minRatio: 0.8,
96
+ deleteOriginalAssets: false
97
+ }),
98
+ !devMode && new CompressionPlugin({
99
+ filename: '[path][base].br',
100
+ algorithm: 'brotliCompress',
101
+ test: /\.(js|css|html|svg|ico|eot|ttf|otf|map)$/,
102
+ compressionOptions: {
103
+ level: 11,
104
+ },
105
+ threshold: 10240,
106
+ minRatio: 0.8,
81
107
  })
82
- ],
108
+ ].filter(Boolean), // filter(Boolean) to prevent false values when it's devMode
83
109
  // resolve: {
84
110
  // alias: {},
85
111
  // modules: [
@@ -1,5 +1,6 @@
1
1
  require 'rails'
2
2
  require "open3"
3
+ require "fileutils"
3
4
 
4
5
  class WebpackNative::Railtie < ::Rails::Railtie
5
6
 
@@ -7,16 +8,36 @@ class WebpackNative::Railtie < ::Rails::Railtie
7
8
  WebpackNative.logger = ActiveSupport::Logger.new(STDOUT)
8
9
  end
9
10
 
11
+ # Zeitwerk raise an error: set_autoloads_in_dir': wrong constant name Path-dirname inferred by Module from directory (Zeitwerk::NameError) ---> app/webpack_native/node_modules/path-dirname
12
+ # to prevent Zeitwerk from eager loading webpack_native folder we use this:
13
+ initializer "zeitwerk_prevent_loading_webpack_native" do
14
+ if Rails.autoloaders.zeitwerk_enabled?
15
+ Rails.autoloaders.main.ignore(Rails.root.join('app/webpack_native'))
16
+ end
17
+ end
18
+
10
19
  initializer "webpack_native_set_manifest" do
11
20
  if Rails.env.production?
12
- manifest_path = "#{Rails.root}/public/webpack_native/manifest.json"
21
+
22
+ # create public/webpack_native if it doesn't exist:
23
+
24
+ webpack_native_folder = "#{Rails.root}/public/webpack_native"
25
+
26
+ unless File.directory?(webpack_native_folder)
27
+ FileUtils.mkdir_p(webpack_native_folder)
28
+ end
29
+
13
30
  # create manifest.json file if it doesn't exist with an empty json {} to prevent raising error in WebpackNativeHelper.load_webpack_manifest if a restart of a service happen (i.e delayed_job restart) that causes rails to load
14
- if !File.file?(manifest_path)
15
- #FileUtils.touch
31
+
32
+ manifest_path = "#{Rails.root}/public/webpack_native/manifest.json"
33
+
34
+ unless File.file?(manifest_path)
35
+ FileUtils.touch manifest_path
16
36
  File.write manifest_path, "{}"
17
37
  end
18
38
  require_relative 'webpack_native_helper'
19
39
  Rails.configuration.x.webpack_native.webpack_manifest_file = WebpackNative::WebpackNativeHelper.load_webpack_manifest
40
+
20
41
  end
21
42
  end
22
43
 
@@ -1,3 +1,3 @@
1
1
  module WebpackNative
2
- VERSION = "0.3.8"
2
+ VERSION = "0.4.8"
3
3
  end
@@ -1,28 +1,55 @@
1
1
  module WebpackNative::WebpackNativeHelper
2
2
 
3
- def webpack_stylesheet_url(asset, **html_options)
3
+ def webpack_stylesheet_tag(asset, **html_options)
4
4
  html_options = html_options.merge(
5
- href: "/webpack_native/#{webpack_manifest_file.fetch("#{asset}.css")}",
5
+ href: webpack_stylesheet_path(asset),
6
6
  rel: "stylesheet"
7
7
  )
8
8
  tag.link(html_options).html_safe
9
9
  end
10
10
 
11
- def webpack_javascript_url(asset, **html_options)
11
+ def webpack_stylesheet_path(asset, **options)
12
+ path_to_asset(webpack_native_lookup("#{asset.gsub('.css', '')}.css"), options)
13
+ end
14
+
15
+ def webpack_stylesheet_url(asset, **options)
16
+ url_to_asset(webpack_native_lookup("#{asset.gsub('.css', '')}.css"), options)
17
+ end
18
+
19
+ def webpack_javascript_tag(asset, **html_options)
12
20
  html_options = html_options.merge(
13
21
  type: "text/javascript",
14
- src: "/webpack_native/#{webpack_manifest_file.fetch("#{asset}.js")}"
22
+ src: webpack_javascript_path(asset)
15
23
  )
16
24
  content_tag("script".freeze, nil, html_options).html_safe
17
25
  # or tag.script(html_options).html_safe
18
26
  end
19
27
 
20
- def webpack_image_url(file_name, **options)
21
- image_tag("/webpack_native/#{file_name}", **options)
28
+ def webpack_javascript_url(asset, **options)
29
+ url_to_asset(webpack_native_lookup("#{asset.gsub('.js', '')}.js"), options)
30
+ end
31
+ def webpack_javascript_path(asset, **options)
32
+ path_to_asset(webpack_native_lookup("#{asset.gsub('.js', '')}.js"), options)
33
+ end
34
+
35
+ def webpack_image_tag(image, **options)
36
+ image_tag(webpack_native_lookup(image), **options)
37
+ end
38
+
39
+ def webpack_image_url(image, **options)
40
+ image_url(webpack_native_lookup(image), **options)
41
+ end
42
+
43
+ def webpack_image_path(image, **options)
44
+ image_path(webpack_native_lookup(image), **options)
22
45
  end
23
46
 
24
47
  private
25
48
 
49
+ def webpack_native_lookup(file)
50
+ "/webpack_native/#{webpack_manifest_file.fetch("#{file}")}"
51
+ end
52
+
26
53
  def webpack_manifest_file
27
54
  # in production, webpack_manifest_file is initialized in railtie.rb file to load one time only, while in development we call load_webpack_manifest on each new request
28
55
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpack_native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - scratchoo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-08 00:00:00.000000000 Z
11
+ date: 2020-10-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Use vanilla webpack to manage your assets efficiently, no webpacker or
14
14
  asset pipeline anymore!