webpacker 3.0.0 → 3.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d46b2ad0a755995989397dd57d6a3f62fd8b6e29
4
- data.tar.gz: 3bc409359bdb19b000d18a85e43d5e32c53c2160
3
+ metadata.gz: 6509ab0499053e37d9af22b79262832b33f8cd91
4
+ data.tar.gz: 869403b35f9178ea48884343782822282b91afde
5
5
  SHA512:
6
- metadata.gz: b6b403b49ea4bd344acb77cf3d02f4d05cee50ace386f05d598f70583ba6f19d3f6114fcec33944e46dd8d7bbaccf6590598225ec0d6159168fe1d016844f9d6
7
- data.tar.gz: 48d1d6686da5d7a9127bff68a26827e95c772b6f7966960b9ee0000707c0579b86db76bfae232dd4cfb74fbfc062b24940147eae270058f8bb8bcdf4ee4cf75c
6
+ metadata.gz: 8fd1e44cf21efb3ab7cb0e581c09e7ace7e3cb73412b227592885db69b5ffb57379f4386635f3937d1211e52aca75e907b4a417c7f2d255b2419e75681716cbc
7
+ data.tar.gz: 1c2cf1efddda9af825334f9e1cace219082ab6b24dbb1db307721c516533474b7451363c3b089819082adec696daea40967a0c55d4cfbe82d66d664b51b645a9
data/.gitignore CHANGED
@@ -4,3 +4,5 @@
4
4
  node_modules
5
5
  .byebug_history
6
6
  /test/test_app/tmp
7
+ Gemfile.lock
8
+ yarn.lock
data/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## [3.0.1] - 2017-09-01
2
+
3
+ ### Fixed
4
+
5
+ - Missing `node_modules/.bin/*` files by bumping minimum Yarn version to 0.25.2 [#727](https://github.com/rails/webpacker/pull/727)
6
+
7
+ - `webpacker:compile` task so that fails properly when webpack compilation fails [#728](https://github.com/rails/webpacker/pull/728)
8
+
9
+ - Rack dev server proxy middleware when served under another proxy (example: pow), which uses `HTTP_X_FORWARDED_HOST` header resulting in `404` for webpacker assets
10
+
11
+ - Make sure tagged logger works with rails < 5 [#716](https://github.com/rails/webpacker/pull/716)
12
+
13
+ ### Added
14
+
15
+ - Allow webpack dev server listen host/ip to be configurable using additional `--listen-host` option
16
+
17
+ ```bash
18
+ ./bin/webpack-dev-server --listen-host 0.0.0.0 --host localhost
19
+ ```
20
+
21
+ ### Removed
22
+
23
+ - `watchContentBase` from devServer config so it doesn't unncessarily trigger
24
+ live reload when manifest changes. If you have applied this workaround from [#724](https://github.com/rails/webpacker/issues/724), please revert the change from `config/webpack/development.js` since this is now fixed.
25
+
26
+
1
27
  ## [3.0.0] - 2017-08-30
2
28
 
3
29
  ### Added
data/README.md CHANGED
@@ -42,7 +42,7 @@ in which case you may not even need the asset pipeline. This is mostly relevant
42
42
  * Ruby 2.2+
43
43
  * Rails 4.2+
44
44
  * Node.js 6.0.0+
45
- * Yarn 0.20.1+
45
+ * Yarn 0.25.2+
46
46
 
47
47
 
48
48
  ## Features
@@ -162,6 +162,15 @@ precedence over the ones already set in the configuration file.
162
162
  ./bin/webpack-dev-server --host example.com --inline true --hot false
163
163
  ```
164
164
 
165
+ By default, webpack dev server listens on `localhost` in development for security
166
+ but if you want your app to be available over local LAN IP or VM instance like vagrant
167
+ you can pass an additional config option `--listen-host`
168
+ when running `./bin/webpack-dev-server` binstub:
169
+
170
+ ```bash
171
+ ./bin/webpack-dev-server --listen-host 0.0.0.0
172
+ ```
173
+
165
174
  **Note:** Don't forget to prefix `ruby` when running these binstubs on windows
166
175
 
167
176
  ## Integrations
data/docs/env.md CHANGED
@@ -35,20 +35,23 @@ yarn add dotenv
35
35
  // config/webpack/environment.js
36
36
 
37
37
  ...
38
- const dotenv = require('dotenv');
38
+ const { environment } = require('@rails/webpacker')
39
+ const webpack = require('webpack')
40
+ const dotenv = require('dotenv')
39
41
 
40
42
  const dotenvFiles = [
41
43
  `.env.${process.env.NODE_ENV}.local`,
42
44
  '.env.local',
43
45
  `.env.${process.env.NODE_ENV}`,
44
46
  '.env'
45
- ];
47
+ ]
46
48
  dotenvFiles.forEach((dotenvFile) => {
47
- dotenv.config({ path: dotenvFile, silent: true });
48
- });
49
+ dotenv.config({ path: dotenvFile, silent: true })
50
+ })
49
51
 
50
- module.exports = {
51
- ...
52
+ environment.plugins.set('Environment', new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(process.env))))
53
+
54
+ module.exports = environment
52
55
  ```
53
56
 
54
57
  **Warning:** using Foreman/Invoker and npm dotenv at the same time can result in
data/docs/webpack.md CHANGED
@@ -12,6 +12,33 @@ By default, you shouldn't have to make any changes to `config/webpack/*.js`
12
12
  files since it's all standard production-ready configuration. However,
13
13
  if you do need to customize or add a new loader, this is where you would go.
14
14
 
15
+ Here is how you can modify webpack configuration:
16
+
17
+ ```js
18
+ // config/webpack/custom.js
19
+ module.exports = {
20
+ resolve: {
21
+ alias: {
22
+ jquery: 'jquery/src/jquery',
23
+ vue: 'vue/dist/vue.js',
24
+ React: 'react',
25
+ ReactDOM: 'react-dom',
26
+ vue_resource: 'vue-resource/dist/vue-resource',
27
+ }
28
+ }
29
+ }
30
+
31
+ // config/webpack/development.js
32
+ const merge = require('webpack-merge')
33
+ const environment = require('./environment')
34
+ const customConfig = require('./custom')
35
+
36
+ module.exports = merge(environment.toWebpackConfig(), customConfig)
37
+ ```
38
+
39
+ **Note:** You will have to merge custom config to all env where you want that config
40
+ to be available. In above case, it will be applied to development environment.
41
+
15
42
 
16
43
  ## Loaders
17
44
 
@@ -26,7 +53,7 @@ yarn add json-loader
26
53
  // config/webpack/environment.js
27
54
  const { environment } = require('@rails/webpacker')
28
55
 
29
- environment.loaders.add('json', {
56
+ environment.loaders.set('json', {
30
57
  test: /\.json$/,
31
58
  use: 'json-loader'
32
59
  })
@@ -60,12 +87,25 @@ for loaders above:
60
87
  ```js
61
88
  // config/webpack/environment.js
62
89
  const { environment } = require('@rails/webpacker')
90
+ const webpack = require('webpack')
63
91
 
64
92
  // Get a pre-configured plugin
65
93
  environment.plugins.get('ExtractText') // Is an ExtractTextPlugin instance
66
94
 
67
- // Add an additional plugin of your choosing
68
- environment.plugins.add('Fancy', new MyFancyWebpackPlugin)
95
+ // Add an additional plugin of your choosing : ProvidePlugin
96
+ environment.plugins.set(
97
+ 'Provide',
98
+ new webpack.ProvidePlugin({
99
+ $: 'jquery',
100
+ jQuery: 'jquery',
101
+ jquery: 'jquery',
102
+ 'window.Tether': 'tether',
103
+ Popper: ['popper.js', 'default'],
104
+ ActionCable: 'actioncable',
105
+ Vue: 'vue',
106
+ VueResource: 'vue-resource',
107
+ })
108
+ )
69
109
 
70
110
  module.exports = environment
71
111
  ```
@@ -78,18 +118,26 @@ The CommonsChunkPlugin is an opt-in feature that creates a separate file (known
78
118
  Add the plugins in `config/webpack/environment.js`:
79
119
 
80
120
  ```js
81
- environment.plugins.add('CommonsChunkVendor', new webpack.optimize.CommonsChunkPlugin({
82
- name: 'vendor',
83
- minChunks: (module) => {
84
- // this assumes your vendor imports exist in the node_modules directory
85
- return module.context && module.context.indexOf('node_modules') !== -1;
86
- }
87
- }))
88
-
89
- environment.plugins.add('CommonsChunkManifest', new webpack.optimize.CommonsChunkPlugin({
90
- name: 'manifest',
91
- minChunks: Infinity
92
- }))
121
+ const webpack = require('webpack')
122
+
123
+ environment.plugins.set(
124
+ 'CommonsChunkVendor',
125
+ new webpack.optimize.CommonsChunkPlugin({
126
+ name: 'vendor',
127
+ minChunks: (module) => {
128
+ // this assumes your vendor imports exist in the node_modules directory
129
+ return module.context && module.context.indexOf('node_modules') !== -1;
130
+ }
131
+ })
132
+ )
133
+
134
+ environment.plugins.set(
135
+ 'CommonsChunkManifest',
136
+ new webpack.optimize.CommonsChunkPlugin({
137
+ name: 'manifest',
138
+ minChunks: Infinity
139
+ })
140
+ )
93
141
  ```
94
142
 
95
143
  Now, add these files to your `layouts/application.html.erb`:
@@ -97,12 +145,12 @@ Now, add these files to your `layouts/application.html.erb`:
97
145
  ```erb
98
146
  <%# Head %>
99
147
 
100
- <%= javascript_pack_tag 'manifest' %>
101
- <%= javascript_pack_tag 'vendor' %>
148
+ <%= javascript_pack_tag "manifest" %>
149
+ <%= javascript_pack_tag "vendor" %>
102
150
 
103
151
  <%# If importing any styles from node_modules in your JS app %>
104
152
 
105
- <%= stylesheet_pack_tag 'vendor' %>
153
+ <%= stylesheet_pack_tag "vendor" %>
106
154
  ```
107
155
 
108
156
  More detailed guides available here: [Webpack guides](https://webpack.js.org/guides/)
@@ -16,7 +16,7 @@ CONFIG_FILE = File.join(APP_PATH, "config/webpacker.yml")
16
16
  NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
17
17
  WEBPACK_CONFIG = File.join(APP_PATH, "config/webpack/#{NODE_ENV}.js")
18
18
 
19
- LISTEN_HOST_ADDR = NODE_ENV == 'development' ? 'localhost' : '0.0.0.0'
19
+ DEFAULT_LISTEN_HOST_ADDR = NODE_ENV == 'development' ? 'localhost' : '0.0.0.0'
20
20
 
21
21
  def args(key)
22
22
  index = ARGV.index(key)
@@ -26,10 +26,11 @@ end
26
26
  begin
27
27
  dev_server = YAML.load_file(CONFIG_FILE)[RAILS_ENV]["dev_server"]
28
28
 
29
- HOSTNAME = args('--host') || dev_server["host"]
30
- PORT = args('--port') || dev_server["port"]
31
- HTTPS = ARGV.include?('--https') || dev_server["https"]
32
- DEV_SERVER_ADDR = "http#{"s" if HTTPS}://#{HOSTNAME}:#{PORT}"
29
+ HOSTNAME = args('--host') || dev_server["host"]
30
+ PORT = args('--port') || dev_server["port"]
31
+ HTTPS = ARGV.include?('--https') || dev_server["https"]
32
+ DEV_SERVER_ADDR = "http#{"s" if HTTPS}://#{HOSTNAME}:#{PORT}"
33
+ LISTEN_HOST_ADDR = args('--listen-host') || DEFAULT_LISTEN_HOST_ADDR
33
34
 
34
35
  rescue Errno::ENOENT, NoMethodError
35
36
  $stdout.puts "Webpack dev_server configuration not found in #{CONFIG_FILE}."
@@ -46,8 +47,8 @@ rescue Errno::EADDRINUSE
46
47
  exit!
47
48
  end
48
49
 
49
- # Delete supplied host and port CLI arguments
50
- ["--host", "--port"].each do |arg|
50
+ # Delete supplied host, port and listen-host CLI arguments
51
+ ["--host", "--port", "--listen-host"].each do |arg|
51
52
  ARGV.delete(args(arg))
52
53
  ARGV.delete(arg)
53
54
  end
@@ -49,7 +49,7 @@ test:
49
49
  production:
50
50
  <<: *default
51
51
 
52
- # Production demands on precompilation of packs prior to booting for performance.
52
+ # Production depends on precompilation of packs prior to booting for performance.
53
53
  compile: false
54
54
 
55
55
  # Cache manifest.json for performance
@@ -3,4 +3,6 @@ import './polyfills.ts';
3
3
  import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
4
4
  import { AppModule } from './app/app.module';
5
5
 
6
- platformBrowserDynamic().bootstrapModule(AppModule);
6
+ document.addEventListener('DOMContentLoaded', () => {
7
+ platformBrowserDynamic().bootstrapModule(AppModule);
8
+ });
@@ -1,19 +1,73 @@
1
- // This file includes polyfills needed by Angular and is loaded before
2
- // the app. You can add your own extra polyfills to this file.
3
- import 'core-js/es6/symbol';
4
- import 'core-js/es6/object';
5
- import 'core-js/es6/function';
6
- import 'core-js/es6/parse-int';
7
- import 'core-js/es6/parse-float';
8
- import 'core-js/es6/number';
9
- import 'core-js/es6/math';
10
- import 'core-js/es6/string';
11
- import 'core-js/es6/date';
12
- import 'core-js/es6/array';
13
- import 'core-js/es6/regexp';
14
- import 'core-js/es6/map';
15
- import 'core-js/es6/set';
16
- import 'core-js/es6/reflect';
1
+ /**
2
+ * This file includes polyfills needed by Angular and is loaded before the app.
3
+ * You can add your own extra polyfills to this file.
4
+ *
5
+ * This file is divided into 2 sections:
6
+ * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7
+ * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8
+ * file.
9
+ *
10
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13
+ *
14
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
15
+ */
16
+
17
+ /***************************************************************************************************
18
+ * BROWSER POLYFILLS
19
+ */
20
+
21
+ /** IE9, IE10 and IE11 requires all of the following polyfills. **/
22
+ // import 'core-js/es6/symbol';
23
+ // import 'core-js/es6/object';
24
+ // import 'core-js/es6/function';
25
+ // import 'core-js/es6/parse-int';
26
+ // import 'core-js/es6/parse-float';
27
+ // import 'core-js/es6/number';
28
+ // import 'core-js/es6/math';
29
+ // import 'core-js/es6/string';
30
+ // import 'core-js/es6/date';
31
+ // import 'core-js/es6/array';
32
+ // import 'core-js/es6/regexp';
33
+ // import 'core-js/es6/map';
34
+ // import 'core-js/es6/weak-map';
35
+ // import 'core-js/es6/set';
36
+
37
+ /** IE10 and IE11 requires the following for NgClass support on SVG elements */
38
+ // import 'classlist.js'; // Run `npm install --save classlist.js`.
17
39
 
40
+ /** Evergreen browsers require these. **/
41
+ import 'core-js/es6/reflect';
18
42
  import 'core-js/es7/reflect';
43
+
44
+
45
+ /**
46
+ * Required to support Web Animations `@angular/animation`.
47
+ * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
48
+ **/
49
+ // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
50
+
51
+
52
+
53
+ /***************************************************************************************************
54
+ * Zone JS is required by Angular itself.
55
+ */
19
56
  import 'zone.js/dist/zone';
57
+ // import 'zone.js/dist/long-stack-trace-zone' // async stack traces with zone.js
58
+
59
+
60
+
61
+ /***************************************************************************************************
62
+ * APPLICATION IMPORTS
63
+ */
64
+
65
+ /**
66
+ * Date, currency, decimal and percent pipes.
67
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
68
+ */
69
+ // import 'intl'; // Run `npm install --save intl`.
70
+ /**
71
+ * Need to import at least one locale-data with intl.
72
+ */
73
+ // import 'intl/locale-data/jsonp/en';
@@ -4,12 +4,16 @@ namespace :webpacker do
4
4
  begin
5
5
  node_version = `node -v`
6
6
  node_version = `nodejs -v` if node_version.blank?
7
- required_node_version = "6.0"
8
-
9
7
  raise Errno::ENOENT if node_version.blank?
10
8
 
11
- if Gem::Version.new(node_version.strip.tr("v", "")) < Gem::Version.new(required_node_version)
12
- $stderr.puts "Webpacker requires Node.js >= v#{required_node_version} and you are using #{node_version}"
9
+ pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
10
+ node_requirement = JSON.parse(pkg_path.read)["engines"]["node"]
11
+
12
+ requirement = Gem::Requirement.new(node_requirement)
13
+ version = Gem::Version.new(node_version.strip.tr("v", ""))
14
+
15
+ unless requirement.satisfied_by?(version)
16
+ $stderr.puts "Webpacker requires Node.js #{requirement} and you are using #{version}"
13
17
  $stderr.puts "Please upgrade Node.js https://nodejs.org/en/download/"
14
18
  $stderr.puts "Exiting!" && exit!
15
19
  end
@@ -1,14 +1,23 @@
1
1
  namespace :webpacker do
2
- desc "Verifies if yarn is installed"
2
+ desc "Verifies if Yarn is installed"
3
3
  task :check_yarn do
4
- required_yarn_version = "0.20.1"
5
-
6
4
  begin
7
5
  yarn_version = `yarn --version`
6
+ raise Errno::ENOENT if yarn_version.blank?
7
+
8
+ pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9
+ yarn_requirement = JSON.parse(pkg_path.read)["engines"]["yarn"]
10
+
11
+ requirement = Gem::Requirement.new(yarn_requirement)
12
+ version = Gem::Version.new(yarn_version)
8
13
 
9
- raise Errno::ENOENT if yarn_version.blank? || Gem::Version.new(yarn_version) < Gem::Version.new(required_yarn_version)
14
+ unless requirement.satisfied_by?(version)
15
+ $stderr.puts "Webpacker requires Yarn #{requirement} and you are using #{version}"
16
+ $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
17
+ $stderr.puts "Exiting!" && exit!
18
+ end
10
19
  rescue Errno::ENOENT
11
- $stderr.puts "Webpacker requires Yarn version >= #{required_yarn_version}. Please download and install the latest version from https://yarnpkg.com/lang/en/docs/install/"
20
+ $stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
12
21
  $stderr.puts "Exiting!" && exit!
13
22
  end
14
23
  end
@@ -16,7 +16,8 @@ class Webpacker::Commands
16
16
  end
17
17
 
18
18
  def compile
19
- compiler.compile
20
- manifest.refresh
19
+ compiler.compile.tap do |success|
20
+ manifest.refresh if success
21
+ end
21
22
  end
22
23
  end
@@ -20,6 +20,8 @@ class Webpacker::Compiler
20
20
  if stale?
21
21
  record_compilation_digest
22
22
  run_webpack
23
+ else
24
+ true
23
25
  end
24
26
  end
25
27