webpacker-jets 3.2.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/.eslintignore +4 -0
  3. data/.eslintrc.js +14 -0
  4. data/.gitignore +6 -0
  5. data/.rubocop.yml +124 -0
  6. data/.travis.yml +32 -0
  7. data/CHANGELOG.md +523 -0
  8. data/Gemfile +13 -0
  9. data/Gemfile.lock +154 -0
  10. data/MIT-LICENSE +20 -0
  11. data/README.md +445 -0
  12. data/Rakefile +12 -0
  13. data/docs/assets.md +106 -0
  14. data/docs/cloud9.md +310 -0
  15. data/docs/css.md +116 -0
  16. data/docs/deployment.md +74 -0
  17. data/docs/docker.md +49 -0
  18. data/docs/env.md +65 -0
  19. data/docs/es6.md +53 -0
  20. data/docs/folder-structure.md +66 -0
  21. data/docs/misc.md +23 -0
  22. data/docs/props.md +223 -0
  23. data/docs/testing.md +128 -0
  24. data/docs/troubleshooting.md +119 -0
  25. data/docs/typescript.md +116 -0
  26. data/docs/webpack-dev-server.md +92 -0
  27. data/docs/webpack.md +297 -0
  28. data/docs/yarn.md +12 -0
  29. data/exe/webpack +8 -0
  30. data/exe/webpack-dev-server +8 -0
  31. data/gemfiles/Gemfile-rails-edge +13 -0
  32. data/gemfiles/Gemfile-rails.4.2.x +10 -0
  33. data/gemfiles/Gemfile-rails.5.0.x +10 -0
  34. data/gemfiles/Gemfile-rails.5.1.x +10 -0
  35. data/lib/install/angular.rb +27 -0
  36. data/lib/install/coffee.rb +22 -0
  37. data/lib/install/config/.babelrc +18 -0
  38. data/lib/install/config/.postcssrc.yml +3 -0
  39. data/lib/install/config/webpack/development.js +3 -0
  40. data/lib/install/config/webpack/environment.js +3 -0
  41. data/lib/install/config/webpack/production.js +3 -0
  42. data/lib/install/config/webpack/staging.js +3 -0
  43. data/lib/install/config/webpack/test.js +3 -0
  44. data/lib/install/config/webpacker.yml +79 -0
  45. data/lib/install/elm.rb +38 -0
  46. data/lib/install/erb.rb +22 -0
  47. data/lib/install/examples/angular/hello_angular.js +7 -0
  48. data/lib/install/examples/angular/hello_angular/app/app.component.ts +9 -0
  49. data/lib/install/examples/angular/hello_angular/app/app.module.ts +16 -0
  50. data/lib/install/examples/angular/hello_angular/index.ts +8 -0
  51. data/lib/install/examples/angular/hello_angular/polyfills.ts +73 -0
  52. data/lib/install/examples/angular/tsconfig.json +19 -0
  53. data/lib/install/examples/coffee/hello_coffee.coffee +4 -0
  54. data/lib/install/examples/elm/Main.elm +54 -0
  55. data/lib/install/examples/elm/hello_elm.js +12 -0
  56. data/lib/install/examples/erb/hello_erb.js.erb +6 -0
  57. data/lib/install/examples/react/.babelrc +6 -0
  58. data/lib/install/examples/react/hello_react.jsx +26 -0
  59. data/lib/install/examples/vue/app.vue +22 -0
  60. data/lib/install/examples/vue/hello_vue.js +70 -0
  61. data/lib/install/javascript/packs/application.js +10 -0
  62. data/lib/install/loaders/coffee.js +6 -0
  63. data/lib/install/loaders/elm.js +23 -0
  64. data/lib/install/loaders/erb.js +11 -0
  65. data/lib/install/loaders/typescript.js +6 -0
  66. data/lib/install/loaders/vue.js +13 -0
  67. data/lib/install/react.rb +28 -0
  68. data/lib/install/template.rb +37 -0
  69. data/lib/install/vue.rb +26 -0
  70. data/lib/tasks/installers.rake +24 -0
  71. data/lib/tasks/webpacker.rake +22 -0
  72. data/lib/tasks/webpacker/check_binstubs.rake +12 -0
  73. data/lib/tasks/webpacker/check_node.rake +24 -0
  74. data/lib/tasks/webpacker/check_yarn.rake +24 -0
  75. data/lib/tasks/webpacker/clobber.rake +16 -0
  76. data/lib/tasks/webpacker/compile.rake +41 -0
  77. data/lib/tasks/webpacker/install.rake +13 -0
  78. data/lib/tasks/webpacker/verify_install.rake +16 -0
  79. data/lib/tasks/webpacker/yarn_install.rake +6 -0
  80. data/lib/webpacker.rb +32 -0
  81. data/lib/webpacker/commands.rb +23 -0
  82. data/lib/webpacker/compiler.rb +88 -0
  83. data/lib/webpacker/configuration.rb +87 -0
  84. data/lib/webpacker/dev_server.rb +61 -0
  85. data/lib/webpacker/dev_server_proxy.rb +26 -0
  86. data/lib/webpacker/dev_server_runner.rb +51 -0
  87. data/lib/webpacker/helper.rb +66 -0
  88. data/lib/webpacker/instance.rb +44 -0
  89. data/lib/webpacker/manifest.rb +75 -0
  90. data/lib/webpacker/railtie.rb +82 -0
  91. data/lib/webpacker/rake_tasks.rb +6 -0
  92. data/lib/webpacker/runner.rb +22 -0
  93. data/lib/webpacker/version.rb +9 -0
  94. data/lib/webpacker/webpack_runner.rb +15 -0
  95. data/package.json +67 -0
  96. data/package/__tests__/environment.js +74 -0
  97. data/package/config.js +34 -0
  98. data/package/config_types/__tests__/config_list.js +123 -0
  99. data/package/config_types/__tests__/config_object.js +43 -0
  100. data/package/config_types/config_list.js +85 -0
  101. data/package/config_types/config_object.js +55 -0
  102. data/package/config_types/index.js +7 -0
  103. data/package/environment.js +116 -0
  104. data/package/environments/development.js +46 -0
  105. data/package/environments/production.js +37 -0
  106. data/package/environments/test.js +3 -0
  107. data/package/index.js +20 -0
  108. data/package/rules/babel.js +13 -0
  109. data/package/rules/css.js +39 -0
  110. data/package/rules/file.js +13 -0
  111. data/package/rules/index.js +11 -0
  112. data/package/rules/sass.js +15 -0
  113. data/package/utils/__tests__/deep_assign.js +11 -0
  114. data/package/utils/__tests__/deep_merge.js +10 -0
  115. data/package/utils/__tests__/objectify.js +9 -0
  116. data/package/utils/deep_assign.js +22 -0
  117. data/package/utils/deep_merge.js +23 -0
  118. data/package/utils/helpers.js +32 -0
  119. data/package/utils/objectify.js +4 -0
  120. data/test/command_test.rb +27 -0
  121. data/test/compiler_test.rb +35 -0
  122. data/test/configuration_test.rb +69 -0
  123. data/test/dev_server_test.rb +24 -0
  124. data/test/helper_test.rb +52 -0
  125. data/test/manifest_test.rb +28 -0
  126. data/test/rake_tasks_test.rb +29 -0
  127. data/test/test_app/Rakefile +3 -0
  128. data/test/test_app/app/javascript/packs/application.js +10 -0
  129. data/test/test_app/config/application.rb +11 -0
  130. data/test/test_app/config/environment.rb +4 -0
  131. data/test/test_app/config/webpacker.yml +65 -0
  132. data/test/test_app/public/packs/manifest.json +6 -0
  133. data/test/test_helper.rb +29 -0
  134. data/webpacker-jets.gemspec +29 -0
  135. data/yarn.lock +5768 -0
  136. metadata +250 -0
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << "test"
7
+ t.libs << "lib"
8
+ t.test_files = FileList["test/**/*_test.rb"]
9
+ t.verbose = true
10
+ end
11
+
12
+ task default: :test
data/docs/assets.md ADDED
@@ -0,0 +1,106 @@
1
+ # Assets
2
+
3
+
4
+ Static assets like images and fonts support is enabled out-of-box
5
+ and you can link them into your JavaScript app code and have them
6
+ compiled automatically.
7
+
8
+
9
+ ## Import from node modules
10
+
11
+ You can also import styles from `node_modules` using the following syntax.
12
+ Please note that your styles will always be extracted into `[pack_name].css`:
13
+
14
+ ```sass
15
+ // app/javascript/styles.sass
16
+ // ~ to tell webpack that this is not a relative import:
17
+
18
+ @import '~@material/animation/mdc-animation'
19
+ @import '~bootstrap/dist/css/bootstrap'
20
+ ```
21
+
22
+ ```js
23
+ // Your main app pack
24
+ // app/javascript/packs/app.js
25
+
26
+ import '../styles'
27
+ ```
28
+
29
+ ```erb
30
+ <%# In your views %>
31
+
32
+ <%= javascript_pack_tag 'app' %>
33
+ <%= stylesheet_pack_tag 'app' %>
34
+ ```
35
+
36
+
37
+ ## Import from Sprockets using helpers
38
+
39
+ It's possible to link to assets that have been precompiled by Sprockets. Add the `.erb` extension to your JavaScript file, then you can use Sprockets' asset helpers:
40
+
41
+ ```erb
42
+ <%# app/javascript/my_pack/example.js.erb %>
43
+
44
+ <% helpers = ActionController::Base.helpers %>
45
+ const railsImagePath = "<%= helpers.image_path('rails.png') %>"
46
+ ```
47
+
48
+ This is enabled by the `rails-erb-loader` loader rule in `config/webpack/loaders/erb.js`.
49
+
50
+
51
+ ## Using babel module resolver
52
+
53
+ You can also use [babel-plugin-module-resolver](https://github.com/tleunen/babel-plugin-module-resolver) to reference assets directly from `app/assets/**`
54
+
55
+ ```bash
56
+ yarn add babel-plugin-module-resolver
57
+ ```
58
+
59
+ Specify the plugin in your `.babelrc` with the custom root or alias. Here's an example:
60
+
61
+ ```json
62
+ {
63
+ "plugins": [
64
+ ["module-resolver", {
65
+ "root": ["./app"],
66
+ "alias": {
67
+ "assets": "./assets"
68
+ }
69
+ }]
70
+ ]
71
+ }
72
+ ```
73
+
74
+ And then within your javascript app code:
75
+
76
+ ```js
77
+ // Note: we don't have do any ../../ jazz
78
+
79
+ import FooImage from 'assets/images/foo-image.png'
80
+ import 'assets/stylesheets/bar'
81
+ ```
82
+
83
+
84
+ ## Link in your Rails views
85
+
86
+ You can also link `js/images/styles/fonts` used within your js app in views using
87
+ `asset_pack_path` helper. This helper is useful in cases where you just want to
88
+ create a `<link rel="prefetch">` or `<img />` for an asset.
89
+
90
+ ```yml
91
+ app/javascript:
92
+ - packs
93
+ - hello_react.js
94
+ - styles
95
+ - hello_react.css
96
+ - images
97
+ - calendar.png
98
+ ```
99
+
100
+ ```erb
101
+ <%= asset_pack_path 'hello_react.css' %>
102
+ <%# => "/packs/hello_react.css" %>
103
+
104
+ <img src="<%= asset_pack_path 'images/calendar.png' %>" />
105
+ <% # => <img src="/packs/images/calendar.png" /> %>
106
+ ```
data/docs/cloud9.md ADDED
@@ -0,0 +1,310 @@
1
+ # Webpack dev server and Rails on Cloud9
2
+
3
+ **Please note that this article is particularly relevant when
4
+ migrating the [`webpacker`] gem from v3.0.1 to v3.0.2, as described in
5
+ the [below](#binstub-versions).**
6
+
7
+ [**`[Go to tl;dr]`**](#tldr)
8
+
9
+ ## Contents
10
+
11
+ - [Context](#context)
12
+ - [Binstub versions](#binstub-versions)
13
+ - [Quick solution](#quick-solution)
14
+ - [Flexible solution](#flexible-solution)
15
+ - [Sources](#sources)
16
+ - [Versions](#versions)
17
+ - [tl;dr](#tldr)
18
+
19
+ ## Context
20
+
21
+ This article describes how to properly configure
22
+ [`webpack-dev-server`] with [`webpacker`] gem on a [Cloud9] workspace.
23
+ After a preliminary remark about the proper binstub version of the
24
+ `./bin/webpack-dev-server` script, this article presents two ways to
25
+ tackle the task: a simple and [quick solution](#quick-solution), which
26
+ is sufficient if we work alone on a project, and a slightly more
27
+ involved but [flexible approach](#flexible-solution), that can be
28
+ useful when several people might work in the same codebase.
29
+
30
+ [Cloud9]: https://c9.io
31
+ [`webpack-dev-server`]: https://github.com/webpack/webpack-dev-server
32
+ [`webpacker`]: https://github.com/rails/webpacker
33
+
34
+ ## Binstub versions
35
+
36
+ A lot of the confusion about the [`webpack-dev-server`] options and
37
+ why they might not be properly taken into account, might be due to an
38
+ outdated version of the `./bin/webpack-dev-server` script. The script
39
+ created by the `rails webpacker:install` task of the [`webpacker`] gem
40
+ v3.0.1 ([source][v3.0.1/lib/install/bin/webpack-dev-server.tt]) is not
41
+ compatible with how v3.0.2 (sic) of the gem handles the
42
+ [`webpack-dev-server`] option flags (see full list of
43
+ [versions](#versions) below), which logically expects the
44
+ corresponding [binstub version][#833] of the script
45
+ ([source][v3.0.2/exe/webpack-dev-server]). So please make sure that
46
+ you are using the [correct binstub][v3.0.2/exe/webpack-dev-server]
47
+ (the same applies to [`./bin/webpack`][v3.0.2/exe/webpack]). To be
48
+ fair, the [changelog of v3.0.2] properly mentions the change:
49
+
50
+ > - Added: Binstubs [#833]
51
+ > - (...)
52
+ > - Removed: Inline CLI args for dev server binstub, use env variables
53
+ instead
54
+
55
+ [changelog of v3.0.2]: https://github.com/rails/webpacker/blob/v3.0.2/CHANGELOG.md#302---2017-10-04
56
+ [v3.0.1/lib/install/bin/webpack-dev-server.tt]: https://github.com/rails/webpacker/blob/v3.0.1/lib/install/bin/webpack-dev-server.tt
57
+ [v3.0.2/exe/webpack-dev-server]: https://github.com/rails/webpacker/blob/v3.0.2/exe/webpack-dev-server
58
+ [v3.0.2/exe/webpack]: https://github.com/rails/webpacker/blob/v3.0.2/exe/webpack
59
+ [#833]: https://github.com/rails/webpacker/pull/833/files
60
+
61
+ ## Quick solution
62
+
63
+ If you are working alone, the easiest way to fix the configuration of
64
+ the [`webpack-dev-server`] is to modify the `development.dev_server`
65
+ entry of the `config/webpacker.yml` file.
66
+
67
+ ### `config/webpacker.yml` file
68
+
69
+ The `development.dev_server` entry of the `config/webpacker.yml` file
70
+ has to be changed from the following default values:
71
+
72
+ ```yaml
73
+ dev_server:
74
+ https: false
75
+ host: localhost
76
+ port: 3035
77
+ public: localhost:3035
78
+ hmr: false
79
+ # Inline should be set to true if using HMR
80
+ inline: true
81
+ overlay: true
82
+ disable_host_check: true
83
+ use_local_ip: false
84
+ ```
85
+
86
+ into the these custom configuration:
87
+
88
+ ```yaml
89
+ dev_server:
90
+ https: true
91
+ host: localhost
92
+ port: 8082
93
+ public: your-workspace-name-yourusername.c9users.io:8082
94
+ hmr: false
95
+ inline: false
96
+ overlay: true
97
+ disable_host_check: true
98
+ use_local_ip: false
99
+ ```
100
+
101
+ You can obtain the value `your-workspace-name-yourusername.c9users.io`
102
+ for your [Cloud9] workspace with `echo ${C9_HOSTNAME}`.
103
+
104
+ There are four main differences with the approaches found in the
105
+ mentioned [sources](#sources):
106
+
107
+ - Some solutions suggested to set the [`host`][devserver-host] option
108
+ to `your-workspace-name-yourusername.c9users.io`, which required to
109
+ add a line to the `/etc/hosts` file by running `echo "0.0.0.0
110
+ ${C9_HOSTNAME}" | sudo tee -a /etc/hosts`. This was only necessary
111
+ due to restrictions in previous versions of [`webpacker`] and how
112
+ the value of the [`public`][devserver-public] setting was
113
+ calculated. Currently it is [no longer necessary][pr-comment-hosts]
114
+ to modify the `/etc/hosts` file because the [`host`][devserver-host]
115
+ setting can be kept as `localhost`.
116
+
117
+ [pr-comment-hosts]: https://github.com/rails/webpacker/pull/1033#pullrequestreview-78992024
118
+
119
+ - Some solutions stressed the need to set the
120
+ [`https`][devserver-https] option to `false` but this failed with
121
+ `net::ERR_ABORTED` in the browser console and raised the following
122
+ exception in the server when the client tried to get the
123
+ JavaScript sources:
124
+
125
+ ```
126
+ #<OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=unknown state>
127
+ ```
128
+
129
+ Setting `https: true` removes the issue.
130
+
131
+ - By leaving the [`inline`][devserver-inline] option to the default
132
+ `false` value, the live compilation still works but the browser
133
+ console constantly reports the following error:
134
+
135
+ ```
136
+ Failed to load https://your-workspace-name-yourusername.c9users.io:8082/sockjs-node/info?t=1511016561187: No 'Access-Control-Allow-Origin' header is present on the requested resource.
137
+ Origin 'https://your-workspace-name-yourusername.c9users.io' is therefore not allowed access. The response had HTTP status code 503.
138
+ ```
139
+
140
+ Setting `inline: false` removes the issue.
141
+
142
+
143
+ - None of the solutions suggested to set the
144
+ [`public`][devserver-public] option in the `config/webpacker.yml`
145
+ file and some suggested to pass it to the `webpack-dev-server`
146
+ command line. By setting it in the configuration file we don't need
147
+ to care about it in the terminal.
148
+
149
+ [devserver-host]: https://webpack.js.org/configuration/dev-server/#devserver-host
150
+ [devserver-https]: https://webpack.js.org/configuration/dev-server/#devserver-https
151
+ [devserver-inline]: https://webpack.js.org/configuration/dev-server/#devserver-inline
152
+ [devserver-public]: https://webpack.js.org/configuration/dev-server/#devserver-public
153
+
154
+ With this configuration, running as usual `./bin/webpack-dev-server`
155
+ in one terminal and `./bin/rails s -b $IP -p $PORT` in another should
156
+ work.
157
+
158
+ ## Flexible solution
159
+
160
+ The previous solution is useful and fast to implement, but if you are
161
+ working with other people on the same repo it can be tricky to
162
+ maintain the proper configuration in the `config/webpacker.yml` file.
163
+ Moreover, the hostname of your [Cloud9] workspace is hardcoded, so
164
+ that the configuration is not portable.
165
+
166
+ A hint about another way to configure the `webpack-dev-server` can be
167
+ found in the [README of this repo][`webpacker` documentation]:
168
+
169
+ > You can use environment variables as options supported by
170
+ > webpack-dev-server in the form `WEBPACKER_DEV_SERVER_<OPTION>`.
171
+ > Please note that these environment variables will always take
172
+ > precedence over the ones already set in the configuration file.
173
+
174
+ Note that when the configuration of the [`webpack-dev-server`] is
175
+ tweaked with ENV variables, those same values _have to be passed_ to
176
+ the `rails server` process as well in order to let it use the _same_
177
+ configuration.
178
+
179
+ Taking that into account, a flexible solution can be implemented using
180
+ [`foreman`] with the following `Procfile.dev`:
181
+
182
+ [`foreman`]: https://github.com/ddollar/foreman
183
+
184
+ ```Procfile
185
+ web: ./bin/rails server -b ${RAILS_SERVER_BINDING:-localhost} -p ${RAILS_SERVER_PORT:-3000}
186
+ webpacker: ./bin/webpack-dev-server
187
+ ```
188
+
189
+ and this `bin/start` script:
190
+
191
+ ```bash
192
+ #!/bin/bash
193
+
194
+ # Immediately exit script on first error
195
+ set -e -o pipefail
196
+
197
+ APP_ROOT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
198
+ cd "${APP_ROOT_FOLDER}"
199
+
200
+ if [ -n "${C9_USER}" ]; then
201
+ # We are in a Cloud9 machine
202
+
203
+ # Make sure that Postgres is running
204
+ sudo service postgresql status || sudo service postgresql start
205
+
206
+ # Adapt the configuration of the webpack-dev-server
207
+ export APP_DOMAIN="${C9_HOSTNAME}"
208
+ export RAILS_SERVER_BINDING='0.0.0.0'
209
+ export RAILS_SERVER_PORT='8080'
210
+ export WEBPACKER_DEV_SERVER_PORT='8082'
211
+ export WEBPACKER_DEV_SERVER_HTTPS='true'
212
+ export WEBPACKER_DEV_SERVER_HOST="localhost"
213
+ export WEBPACKER_DEV_SERVER_PUBLIC="${C9_HOSTNAME}:${WEBPACKER_DEV_SERVER_PORT}"
214
+ export WEBPACKER_DEV_SERVER_HMR='false'
215
+ export WEBPACKER_DEV_SERVER_INLINE='false'
216
+ export WEBPACKER_DEV_SERVER_OVERLAY='true'
217
+ export WEBPACKER_DEV_SERVER_DISABLE_HOST_CHECK='true'
218
+ export WEBPACKER_DEV_SERVER_USE_LOCAL_IP='false'
219
+ fi
220
+
221
+ foreman start -f Procfile.dev
222
+ ```
223
+
224
+ With these two scripts in place, the application can always be started
225
+ by running `bin/start`, in both [Cloud9] and other systems. The
226
+ trick is that by exporting the `WEBPACKER_DEV_SERVER_*` variables
227
+ before calling `foreman start`, we make sure that those values are
228
+ available to both `webpack-dev-server` and `rails server` processes.
229
+
230
+ ## Sources
231
+
232
+ - ["Webpack dev server and Rails on Cloud9"][original-article] (the
233
+ original source for the present article, inspired by this
234
+ [comment][original-comment])
235
+ - ["Making Webpacker run on Cloud 9"] (GitHub issue)
236
+ - ["Anyone here got webpack-dev-server to work on Cloud 9?"] (GitHub issue)
237
+ - [`webpacker` documentation]
238
+ - [`webpacker/dev_server.rb` code]
239
+ - [`webpack-dev-server` documentation]
240
+ - ["Using Rails With Webpack in Cloud 9"] (blog article)
241
+
242
+ [original-article]: http://rbf.io/en/blog/2017/11/18/webpack-dev-server-and-rails-on-cloud9/
243
+ [original-comment]: https://github.com/rails/webpacker/issues/176#issuecomment-345532309
244
+ ["Making Webpacker run on Cloud 9"]: https://github.com/rails/webpacker/issues/176
245
+ ["Anyone here got webpack-dev-server to work on Cloud 9?"]: https://github.com/webpack/webpack-dev-server/issues/230
246
+ [`webpacker` documentation]: https://github.com/rails/webpacker/tree/v3.0.2#development
247
+ [`webpacker/dev_server.rb` code]: https://github.com/rails/webpacker/blob/v3.0.2/lib/webpacker/dev_server.rb#L55
248
+ [`webpack-dev-server` documentation]: https://webpack.js.org/configuration/dev-server/
249
+ ["Using Rails With Webpack in Cloud 9"]: http://aalvarez.me/blog/posts/using-rails-with-webpack-in-cloud-9.html
250
+
251
+ ## Versions
252
+
253
+ Since things in this ecosystem move fast, it's important to mention the
254
+ versions of the world for which this documentation is relevant:
255
+
256
+ ```shell
257
+ $ egrep '^ ?(ruby|webpacker|rails) ' Gemfile.lock
258
+ rails (5.1.4)
259
+ webpacker (3.0.2)
260
+ ruby 2.4.2p198
261
+
262
+ $ yarn versions
263
+ yarn versions v1.1.0
264
+ { http_parser: '2.7.0',
265
+ node: '8.5.0',
266
+ v8: '6.0.287.53',
267
+ uv: '1.14.1',
268
+ zlib: '1.2.11',
269
+ ares: '1.10.1-DEV',
270
+ modules: '57',
271
+ nghttp2: '1.25.0',
272
+ openssl: '1.0.2l',
273
+ icu: '59.1',
274
+ unicode: '9.0',
275
+ cldr: '31.0.1',
276
+ tz: '2017b' }
277
+
278
+ $ cat /etc/os-release | head -6
279
+ NAME="Ubuntu"
280
+ VERSION="14.04.5 LTS, Trusty Tahr"
281
+ ID=ubuntu
282
+ ID_LIKE=debian
283
+ PRETTY_NAME="Ubuntu 14.04.5 LTS"
284
+ VERSION_ID="14.04"
285
+ ```
286
+
287
+ Everything was tested using Chrome Version 62.
288
+
289
+ ## tl;dr
290
+
291
+ 1. Make sure that you are running the [proper binstub
292
+ version](#binstub-versions) of `./bin/webpack-dev-server`.
293
+
294
+ 1. Change the `development.dev_server` entry `config/webpacker.yml` file into:
295
+
296
+ ```yaml
297
+ dev_server:
298
+ https: true
299
+ host: localhost
300
+ port: 8082
301
+ public: your-workspace-name-yourusername.c9users.io:8082
302
+ hmr: false
303
+ inline: false
304
+ overlay: true
305
+ disable_host_check: true
306
+ use_local_ip: false
307
+ ```
308
+
309
+ 1. Now running as usual `./bin/webpack-dev-server` in one terminal and
310
+ `./bin/rails s -b $IP -p $PORT` in another should work as expected.
data/docs/css.md ADDED
@@ -0,0 +1,116 @@
1
+ # CSS, Sass and SCSS
2
+
3
+
4
+ Webpacker supports importing CSS, Sass and SCSS files directly into your JavaScript files.
5
+
6
+
7
+ ## Import styles into your JS app
8
+
9
+ ```sass
10
+ // app/javascript/hello_react/styles/hello-react.sass
11
+
12
+ .hello-react
13
+ padding: 20px
14
+ font-size: 12px
15
+ ```
16
+
17
+ ```js
18
+ // React component example
19
+ // app/javascripts/packs/hello_react.jsx
20
+
21
+ import React from 'react'
22
+ import helloIcon from '../hello_react/images/icon.png'
23
+ import '../hello_react/styles/hello-react'
24
+
25
+ const Hello = props => (
26
+ <div className="hello-react">
27
+ <img src={helloIcon} alt="hello-icon" />
28
+ <p>Hello {props.name}!</p>
29
+ </div>
30
+ )
31
+ ```
32
+
33
+
34
+ ## Link styles from your Rails views
35
+
36
+ Under the hood webpack uses
37
+ [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) plugin to extract all the referenced styles within your app and compile it into
38
+ a separate `[pack_name].css` bundle so that in your view you can use the
39
+ `stylesheet_pack_tag` helper.
40
+
41
+ ```erb
42
+ <%= stylesheet_pack_tag 'hello_react' %>
43
+ ```
44
+
45
+
46
+ ## Add bootstrap
47
+
48
+ You can use Yarn to add bootstrap or any other modules available on npm:
49
+
50
+ ```bash
51
+ yarn add bootstrap
52
+ ```
53
+
54
+ Import Bootstrap and theme (optional) CSS in your app/javascript/packs/app.js file:
55
+
56
+ ```js
57
+ import 'bootstrap/dist/css/bootstrap'
58
+ import 'bootstrap/dist/css/bootstrap-theme'
59
+ ```
60
+
61
+ Or in your app/javascript/app.sass file:
62
+
63
+ ```sass
64
+ // ~ to tell that this is not a relative import
65
+
66
+ @import '~bootstrap/dist/css/bootstrap'
67
+ @import '~bootstrap/dist/css/bootstrap-theme'
68
+ ```
69
+
70
+
71
+ ## Post-Processing CSS
72
+
73
+ Webpacker out-of-the-box provides CSS post-processing using
74
+ [postcss-loader](https://github.com/postcss/postcss-loader)
75
+ and the installer sets up a standard `.postcssrc.yml`
76
+ file in your app root with standard plugins.
77
+
78
+ ```yml
79
+ plugins:
80
+ postcss-import: {}
81
+ postcss-cssnext: {}
82
+ ```
83
+
84
+ ## Using CSS with [vue-loader](https://github.com/vuejs/vue-loader)
85
+
86
+ Vue templates require loading the stylesheet in your application in
87
+ order for CSS to work. This is in addition to loading the JavaScript
88
+ file for the entry point. Loading the stylesheet will also load the
89
+ CSS for any nested components.
90
+
91
+ ```erb
92
+ <%= stylesheet_pack_tag 'hello_vue' %>
93
+ <%= javascript_pack_tag 'hello_vue' %>
94
+ ```
95
+
96
+ ## Resolve url loader
97
+
98
+ Since `Sass/libsass` does not provide url rewriting, all linked assets must be relative to the output. Add the missing url rewriting using the resolve-url-loader. Place it directly after the sass-loader in the loader chain.
99
+
100
+
101
+ ```bash
102
+ yarn add resolve-url-loader
103
+ ```
104
+
105
+ ```js
106
+ // webpack/environment.js
107
+ const { environment } = require('@rails/webpacker')
108
+
109
+ // resolve-url-loader must be used before sass-loader
110
+ environment.loaders.get('sass').use.splice(-1, 0, {
111
+ loader: 'resolve-url-loader',
112
+ options: {
113
+ attempts: 1
114
+ }
115
+ });
116
+ ```