opal-webpack-loader 0.8.4 → 0.8.5

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: 9e38eb7715652124bd768935c886cf8eac35e9cba389c331a5cdedb02309da6c
4
- data.tar.gz: 1ee22be3cbc82393fa4c96bfbb46f03e4fc10832e3d3585994a2d8a5f35a7d20
3
+ metadata.gz: b9bfab5e0fa697ff318110425f9d31c8b7778ca8f8b0459ef9aa7a6896ff2b0e
4
+ data.tar.gz: 8317f60c83191b8a9089675c0fcc9bdb4049ae2b29bb1e1009c3fb88ce7c8d6e
5
5
  SHA512:
6
- metadata.gz: 92447360d5f475c9d914b508d35f1deb4add5ac8b94d253cc55c8821a933855644f5c2b939660beaa8040b4c31abc338b1a76df168df0d1da5221f999c7365c7
7
- data.tar.gz: 7fe89a6a56545d637bda8174b0ae8fef1e0843ad6543b1ead6f2c16dc2b77f5ac04a94a1f01b8688a0b998e2ac01a75f2539989a1066a1053a01740ba2023d68
6
+ metadata.gz: 1327659b282452073e130dba988a5722071c6ac74b65598021f8e1b2f4a55e3e527ddab6e7770a5a03d35fb298aeabbd2c3e99480fda1b3ee189a83cac97bc91
7
+ data.tar.gz: c9c470768b357e3e13ff7210db09f39453595ba837bf7d96e279cfb9487f56c39dda004c4589e251d1db185e0ee4af5fbd4aa83e47e02a6a507ab8911a9ee420
@@ -46,7 +46,7 @@ module OpalWebpackLoader
46
46
  FileUtils.touch(File.join(@asset_output_directory, '.keep'))
47
47
  install_webpack_config
48
48
  install_gitignore
49
- create_file_from_template('initializer.rb.erb', File.join('owl_init.rb'), { opal_directory: @opal_directory })
49
+ create_file_from_template('initializer.rb.erb', File.join('owl_init.rb'), { opal_load_path: '' })
50
50
  # add_gem
51
51
  end
52
52
 
@@ -83,8 +83,8 @@ module OpalWebpackLoader
83
83
  create_common_directories
84
84
  install_common_things
85
85
  create_file_from_template('application.css.erb', File.join('styles', 'application.css'), {})
86
- create_file_from_template('initializer.rb.erb', 'owl_init.rb', { opal_directory: @opal_directory })
87
- create_file_from_template('app_loader.rb.erb', 'app_loader.rb', {})
86
+ create_file_from_template('initializer.rb.erb', 'owl_init.rb', { opal_load_path: '' })
87
+ create_file_from_template('app_loader.rb.erb', 'app_loader.rb', { opal_directory: @opal_directory })
88
88
  add_gem
89
89
  print_message
90
90
  end
@@ -127,7 +127,7 @@ module OpalWebpackLoader
127
127
  create_common_directories
128
128
  install_common_things
129
129
  create_file_from_template('initializer.rb.erb', File.join('config', 'initializers', 'opal_webpack_loader.rb'),
130
- { opal_directory: @opal_directory })
130
+ { opal_load_path: "Opal.append_path(File.realdirpath('#{@opal_directory}'))" })
131
131
  add_gem
132
132
  print_message
133
133
  end
@@ -174,7 +174,7 @@ module OpalWebpackLoader
174
174
  install_opal_entries
175
175
  install_gitignore
176
176
  create_file_from_template('initializer.rb.erb', File.join('config', 'initializers', 'opal_webpack_loader.rb'),
177
- { opal_directory: @opal_directory })
177
+ { opal_load_path: "Opal.append_path(File.realdirpath('#{@opal_directory}'))" })
178
178
  add_gem
179
179
  print_message
180
180
  end
@@ -1,11 +1,9 @@
1
1
  require 'bundler/setup'
2
- # change OWL_ENV to the projects name env, like MY_PROJECT_ENV
3
- env_name = 'OWL_ENV'
4
- if ENV[env_name] && ENV[env_name] == 'test'
2
+ if ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'test'
5
3
  Bundler.require(:default, :test)
6
- elsif ENV[env_name] && ENV[env_name] == 'production'
4
+ elsif ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'production'
7
5
  Bundler.require(:default, :production)
8
6
  else
9
7
  Bundler.require(:default, :development)
10
8
  end
11
- require './owl_init'
9
+ Opal.append_path(File.realdirpath('<%= opal_directory %>'))
@@ -41,9 +41,7 @@ const common_config = {
41
41
  new webpack.NamedModulesPlugin(),
42
42
  new webpack.HotModuleReplacementPlugin(),
43
43
  // watch for added files in opal dir
44
- new ExtraWatchWebpackPlugin({
45
- dirs: [ path.resolve(__dirname, '<%= opal_directory %>') ]
46
- })
44
+ new ExtraWatchWebpackPlugin({ dirs: [ path.resolve(__dirname, '<%= opal_directory %>') ] })
47
45
  ],
48
46
  module: {
49
47
  rules: [
@@ -55,15 +53,11 @@ const common_config = {
55
53
  { loader: "cache-loader" },
56
54
  {
57
55
  loader: "style-loader",
58
- options: {
59
- hmr: true
60
- }
56
+ options: { hmr: true }
61
57
  },
62
58
  {
63
59
  loader: "css-loader",
64
- options: {
65
- sourceMap: true // set to false to speed up hot reloads
66
- }
60
+ options: { sourceMap: true }
67
61
  },
68
62
  {
69
63
  loader: "sass-loader",
@@ -81,15 +75,11 @@ const common_config = {
81
75
  { loader: "cache-loader" },
82
76
  {
83
77
  loader: "style-loader",
84
- options: {
85
- hmr: true
86
- }
78
+ options: { hmr: true }
87
79
  },
88
80
  {
89
81
  loader: "css-loader",
90
- options: {
91
- sourceMap: true // set to false to speed up hot reloads
92
- }
82
+ options: { sourceMap: true }
93
83
  }
94
84
  ]
95
85
  },
@@ -137,8 +127,6 @@ const common_config = {
137
127
  ignored: /\bnode_modules\b/
138
128
  },
139
129
  contentBase: path.resolve(__dirname, 'public'),
140
- // watchContentBase: true,
141
- // writeToDisk: true, // TODO this may need to be activated for ssr to work in development
142
130
  useLocalIp: false
143
131
  }
144
132
  };
@@ -32,9 +32,7 @@ const common_config = {
32
32
  new webpack.NamedModulesPlugin(),
33
33
  new webpack.HotModuleReplacementPlugin(),
34
34
  // watch for added files in opal dir
35
- new ExtraWatchWebpackPlugin({
36
- dirs: [ path.resolve(__dirname, '<%= opal_directory %>') ]
37
- })
35
+ new ExtraWatchWebpackPlugin({ dirs: [ path.resolve(__dirname, '<%= opal_directory %>') ] })
38
36
  ],
39
37
  module: {
40
38
  rules: [
@@ -46,18 +44,12 @@ const common_config = {
46
44
  { loader: "cache-loader" },
47
45
  {
48
46
  loader: "style-loader",
49
- options: {
50
- hmr: true
51
- }
52
- },
53
- {
54
- loader: "css-loader"
47
+ options: { hmr: true }
55
48
  },
49
+ { loader: "css-loader" },
56
50
  {
57
51
  loader: "sass-loader",
58
- options: {
59
- includePaths: [path.resolve(__dirname, '<%= stylesheets_directory %>')],
60
- }
52
+ options: { includePaths: [path.resolve(__dirname, '<%= stylesheets_directory %>')] }
61
53
  }
62
54
  ]
63
55
  },
@@ -68,13 +60,9 @@ const common_config = {
68
60
  { loader: "cache-loader" },
69
61
  {
70
62
  loader: "style-loader",
71
- options: {
72
- hmr: true
73
- }
63
+ options: { hmr: true }
74
64
  },
75
- {
76
- loader: "css-loader"
77
- }
65
+ { loader: "css-loader" }
78
66
  ]
79
67
  },
80
68
  {
@@ -121,8 +109,6 @@ const common_config = {
121
109
  ignored: /\bnode_modules\b/
122
110
  },
123
111
  contentBase: path.resolve(__dirname, 'public'),
124
- // watchContentBase: true,
125
- // writeToDisk: true,
126
112
  useLocalIp: false
127
113
  }
128
114
  };
@@ -1,6 +1,4 @@
1
- Opal.append_path(File.realdirpath('<%= opal_directory %>'))
2
-
3
- env = defined?(Rails) ? Rails.env : ENV['OWL_ENV']
1
+ env = defined?(Rails) ? Rails.env : ENV['RACK_ENV']
4
2
  env = 'development' unless env
5
3
  if env != 'development'
6
4
  OpalWebpackLoader.client_asset_path = '' # the full path is in the manifest already, like: /assets/application-97fd9c2b7e7bdb112fc1.js
@@ -10,4 +8,5 @@ else
10
8
  OpalWebpackLoader.client_asset_path = 'http://localhost:3035/assets/'
11
9
  OpalWebpackLoader.manifest_path = nil
12
10
  OpalWebpackLoader.use_manifest = false
13
- end
11
+ end
12
+ <%= opal_load_path %>
@@ -20,8 +20,8 @@
20
20
  "style-loader": "^0.23.1",
21
21
  "terser-webpack-plugin": "^1.2.3",
22
22
  "webpack": "^4.30.0",
23
+ "webpack-assets-manifest": "^3.1.1",
23
24
  "webpack-cli": "^3.3.0",
24
- "webpack-dev-server": "^3.3.1",
25
- "webpack-manifest-plugin": "^2.0.4"
25
+ "webpack-dev-server": "^3.3.1"
26
26
  }
27
27
  }
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const OwlResolver = require('opal-webpack-loader/resolver');
3
3
  const CompressionPlugin = require("compression-webpack-plugin"); // for gzipping the packs
4
- const ManifestPlugin = require('webpack-manifest-plugin'); // for generating the manifest
4
+ const WebpackAssetsManifest = require('webpack-assets-manifest');
5
5
  const TerserPlugin = require('terser-webpack-plugin');
6
6
 
7
7
  const common_config = {
@@ -10,9 +10,7 @@ const common_config = {
10
10
  optimization: {
11
11
  minimize: true, // minimize
12
12
  minimizer: [
13
- new TerserPlugin({
14
- cache: true
15
- })
13
+ new TerserPlugin({ cache: true })
16
14
  ]
17
15
  },
18
16
  performance: {
@@ -31,7 +29,7 @@ const common_config = {
31
29
  },
32
30
  plugins: [
33
31
  new CompressionPlugin({ test: /^((?!application_ssr).)*$/, cache: true }), // gzip compress, exclude application_ssr.js
34
- new ManifestPlugin({ fileName: 'manifest.json' }) // generate manifest
32
+ new WebpackAssetsManifest({ publicPath: true }) // generate manifest
35
33
  ],
36
34
  module: {
37
35
  rules: [
@@ -41,9 +39,7 @@ const common_config = {
41
39
  { loader: "cache-loader" },
42
40
  {
43
41
  loader: "style-loader",
44
- options: {
45
- hmr: false
46
- }
42
+ options: { hmr: false }
47
43
  },
48
44
  {
49
45
  loader: "css-loader",
@@ -1,3 +1,3 @@
1
1
  module OpalWebpackLoader
2
- VERSION="0.8.4"
2
+ VERSION="0.8.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-webpack-loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-23 00:00:00.000000000 Z
11
+ date: 2019-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -205,7 +205,6 @@ files:
205
205
  - lib/opal-webpack-loader/templates/webpacker_development.js_example
206
206
  - lib/opal-webpack-loader/version.rb
207
207
  - lib/opal-webpack-loader/view_helper.rb
208
- - readme.md
209
208
  homepage: http://isomorfeus.com
210
209
  licenses:
211
210
  - MIT
data/readme.md DELETED
@@ -1,217 +0,0 @@
1
- <h1 align="center">
2
- <img src="https://raw.githubusercontent.com/isomorfeus/opal-webpack-loader/master/docs/owl.png"
3
- align="center" title="Opal logo by Elia Schito combined with Webpack Logo" width="111" height="125" />
4
- <br/>
5
- opal-webpack-loader<br/>
6
- <img src="https://img.shields.io/badge/Opal-Ruby%20💛%20JavaScript%20💛%20Webpack-yellow.svg?logo=ruby&style=social&logoColor=777"/>
7
- </h1>
8
-
9
- Bundle assets with webpack, resolve and compile opal ruby files and import them in the bundle, without sprockets or the webpacker gem
10
- (but can be used with both of them too).
11
- Includes a loader and resolver plugin for webpack.
12
-
13
- ### Community and Support
14
- At the [Isomorfeus Framework Project](http://isomorfeus.com)
15
-
16
- ### Tested
17
- [TravisCI](https://travis-ci.org): [![Build Status](https://travis-ci.org/isomorfeus/opal-webpack-loader.svg?branch=master)](https://travis-ci.org/isomorfeus/opal-webpack-loader)
18
-
19
- ### Features
20
- - comes with a installer for rails and other frameworks
21
- - webpack based build process
22
- - very fast, asynchronous and parallel builds of opal code:
23
- opal-webpack-loader-0.7.1 compiles all of opal, a bunch of gems and over 19000SLC on a
24
- Intel® Core™ i7-7700HQ CPU @ 2.80GHz × 8, with 8 workers in around 1850ms
25
- - opal modules are packaged as es6 modules
26
- - support for rails with webpacker
27
- - other webpack features become available, like:
28
- - source maps
29
- - multiple targets: web (for browsers), node (for server side rendering) and webworker (for Web Workers)
30
- - hot module reloading for opal ruby code and stylesheets and html views
31
- - tree shaking
32
- - code splitting
33
- - lazy loading
34
- - everything else webpack can do, like loading stylesheets, etc.
35
-
36
- ### Requirements
37
- - opal-webpack-loader consists of 2 parts, the npm package and the gem, both are required and must be the same version.
38
- - webpack 4.30
39
- - webpack-dev-server 3.3.0
40
- - one of the ES6 modules branches of opal
41
- - [PR#1970](https://github.com/opal/opal/pull/1969), (recommended) implementing ES6 modules and changes for 'strict' mode,
42
- based on Opal master 1.0.0 using javascript string primitives
43
-
44
- `gem 'opal', github: 'janbiedermann/opal', branch: 'es6_modules'`
45
-
46
- - [PR#1973](https://github.com/opal/opal/pull/1973), (experimental) implementing ES6 modules and changes for 'strict' mode,
47
- based on Opal master 1.0.0 using javascript string objects "mutable strings" by default for all strings
48
-
49
- `gem 'opal', github: 'janbiedermann/opal', branch: 'es6_modules_string'`
50
-
51
- - [PR#1976](https://github.com/opal/opal/pull/1976), (experimental) implementing ES6 modules and changes for 'strict' mode,
52
- based on Opal master 1.1.0 using javascript string primitives and providing nice features like `require_lazy 'my_module'`
53
-
54
- `gem 'opal', github: 'janbiedermann/opal', branch: 'es6_modules_1_1'`
55
-
56
- - if you have the webpacker gem installed somewhere, it should be a version supporting webpack 4
57
- - ruby, version 2.5 or higher recommended
58
- - bundler, latest version recommended
59
-
60
- ### Installation
61
-
62
- #### Using the installer
63
- First install the gem:
64
- ```
65
- gem install 'opal-webpack-loader'
66
- ```
67
-
68
- Continue here:
69
- - [Install for Rails like projects](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/installation_rails.md)
70
- - [Install for Cuba, Roda, Sinatra and other projects with a flat structure](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/installation_flat.md)
71
- - [Manual Installation](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/installation_manual.md)
72
-
73
- ### Example applications
74
- [are here](https://github.com/isomorfeus/opal-webpack-loader/tree/master/example_apps/)
75
-
76
- ### General Usage without Webpacker
77
-
78
- After installing owl with the installer, three scripts are provided in package.json:
79
- - `development` - runs the webpack-dev-server, use for general development, provides fast reloads, entry is application.js
80
- - `debug` - runs the webpack-dev-server, use for debugging, provides source maps, entry is application_debug.js. Additional debugging tools may be added there.
81
- - `production_build` - runs webpack to build assets for production, entry is application.js
82
-
83
- These scripts can for example be run with:
84
- `yarn run debug` or `npm run debug`
85
-
86
- The default config provides several targets and entries:
87
-
88
- - **Browser**: the webpack target is 'web' and the javascript entry file for imports is `application.js` - general use for the application with all
89
- browser features, the opal ruby entry file is `opal_loader.rb` in the opal or app/opal directory of the app.
90
- - **Server Side Rendering**: the webpack target is `node` and the javascript entry file for imports is `application_ssr.js` - general use for the
91
- application server side rendering, several Browser features are unavailable, no `window`, no `document`, some node features are available,
92
- like `Buffer`, the opal ruby entry file is `opal_loader.rb` in the opal or app/opal directory of the app.
93
- (meant to be used with isomorfeus-speednode, standard ExecJS limitations prevent certain webpack features)
94
- - **Web Worker**: the webpack target is 'webworker' and the javascript entry file for imports is `application_webworker.js` - used to initialize Web
95
- Workers in the browser, the opal ruby entry file is `opal_webworker_loader.rb` in the opal or app/opal directory of the app.
96
-
97
- Only the browser target is build by default. To builds the other target, just add the needed targets to the last line of the webpack config,
98
- for example to `development.js`:
99
- default config:
100
- ```javascript
101
- module.exports = [ browser ];
102
- ```
103
- modified config with ssr and web_worker targets enabled:
104
- ```javascript
105
- module.exports = [ browser, ssr, web_worker ];
106
- ```
107
- Same works for the `debug.js` and `production.js` webpack config files.
108
-
109
- Also a Procfile has been installed, for rails its easy to startup rails and webpack with foreman:
110
- `foreman start` (`gem install foreman` if you dont have it already). It will start rails and webpack-dev-server with the development script.
111
-
112
- For non rails installation check the Procfile and add a starter for your app.
113
-
114
- #### Opal Ruby Application Files
115
- For rails installations with the installer they all go into: `app/opal`, for flat installations in the `opal` directory.
116
- In this directory there already is a `opal_loader.rb` which is the entry point for your app.
117
-
118
- #### Stylesheets
119
- Stylesheets are hot reloaded too with the default config installed by the installer. Also they are imported into application.js by default.
120
- For rails like applications stylesheets are in `app/assets/stylesheets/application.css`, for flat applications they are in `styles/application.css`.
121
- SCSS is supported too by the default config.
122
-
123
- #### Views
124
- For rails like applications a watcher for `app/views` is installed by default. The watcher will trigger a page reload when views are changed.
125
- For flat applications nothing is configured by default, as there are to many ways to generate views, they are not even needed with
126
- frameworks like isomorfeus. Instead the section for configuring a view watcher is included in the development.js and debug.js webpack
127
- config, but it is commented out. Please see those files and adjust to your liking.
128
-
129
- #### Parallel compilation for speed
130
-
131
- Since version 0.8.0 the number of CPUs is automatically determined and a appropriate number of of compile server workers is started automatically.
132
-
133
- ### Source Maps
134
-
135
- [Source Maps](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/source_maps.md)
136
-
137
- ### Hot Module Reloading
138
- [Hot Module Reloading](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/hot_module_reloading.md)
139
-
140
- ### Opal Load Path
141
- The projects directory for opal ruby files must be in the opal load path. This is done in the initializer for rails apps in
142
- config/initializers/opal_webpack_loader.rb or in 'owl_init.rb' for non rails apps, for example:
143
- ```ruby
144
- Opal.append_path(File.realdirpath('app/opal'))
145
- ```
146
-
147
- ### View Helper
148
- In Rails or frameworks that support `javscript_include_tag`, add to the app/helpers/application_helper.rb
149
- ```ruby
150
- module ApplicationHelper
151
- include OpalWebpackLoader::RailsViewHelper
152
- ```
153
- in other frameworks that dont have a `javascript_include_tag`:
154
- ```ruby
155
- module MyProjectsViewThings
156
- include OpalWebpackLoader::ViewHelper
157
- ```
158
-
159
- Then you can use in your views:
160
- ```ruby
161
- owl_script_tag('application.js')
162
- ```
163
- #### Compile Server and app_loader.rb
164
- For non rails projects, determining Opal load paths, for the resolver and compile server to work properly, may not be obvious. For these cases
165
- a file `app_loader.rb` in the projects root can be created which just loads all requirements without starting anything.
166
- Usually it would just setup bundler with the appropriate options, for example:
167
- ```ruby
168
- require 'bundler/setup'
169
- if ENV['MY_PROJECT_ENV'] && ENV['MY_PROJECT_ENV'] == 'test'
170
- Bundler.require(:default, :test)
171
- elsif ENV['MY_PROJECT_ENV'] && ENV['MY_PROJECT_ENV'] == 'production'
172
- Bundler.require(:default, :production)
173
- else
174
- Bundler.require(:default, :development)
175
- end
176
- require './owl_init.rb' # this is a good place to require the opal-webpack-loader initializer, to get the apps opal load path
177
- ```
178
- When this file exists, the compile server will load it and generate Opal load paths accordingly for the resolver.
179
-
180
- #### Project configuration options for the view helper
181
- These setting are in the initializer in config/initializers/opal_webpack_loader.rb for rails like apps, or owl_init.rb for others.
182
- ```ruby
183
- OpalWebpackLoader.use_manifest = false
184
- ```
185
- If the manifest file should be used, use_manifest should be true.
186
- ```ruby
187
- OpalWebpackLoader.manifest_path = File.join(Dir.getwd, 'public', 'assets', 'manifest.json')
188
- ```
189
- Sets the path to the webpack (with the [webpack-manifest-plugin](https://www.npmjs.com/package/webpack-manifest-plugin)) generated manifest.json to look up assets.
190
- ```ruby
191
- OpalWebpackLoader.client_asset_path = 'http://localhost:3035/assets/'
192
- ```
193
- The path to prepend to the assets as configured in the webpack config 'publicPath'.
194
- In the config example below its `publicPath: 'http://localhost:3025/assets'` so
195
- client_asset_path should be set to the same.
196
-
197
- For **production** use with readily precompiled and compressed assets which contain a fingerprint in the name (webpacks [chunkhash]),
198
- and if the path in the manifest is the full path to the asset as configured in webpack,
199
- these settings would work:
200
- ```ruby
201
- OpalWebpackLoader.use_manifest = true
202
- OpalWebpackLoader.manifest_path = File.join(Dir.getwd, 'public', 'assets', 'manifest.json')
203
- OpalWebpackLoader.client_asset_path = ''
204
- ```
205
-
206
- For **development** use with webpack-dev-server, with no manifest, these settings would work:
207
- ```ruby
208
- OpalWebpackLoader.use_manifest = false
209
- OpalWebpackLoader.manifest_path = File.join(Dir.getwd, 'public', 'assets', 'manifest.json') # doesn't matter, not used
210
- OpalWebpackLoader.client_asset_path = 'http://localhost:3035/assets/'
211
- ```
212
- ### Advanced Options
213
- [Advanced Options](https://github.com/isomorfeus/opal-webpack-loader/blob/master/docs/advanced_options.md)
214
- ### Tests
215
- - clone the repo
216
- - `bundle install`
217
- - `bundle exec rspec`