shakapacker 6.0.0.rc.13 → 6.0.2
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/CHANGELOG.md +23 -10
- data/Gemfile.lock +1 -1
- data/README.md +72 -49
- data/docs/customizing_babel_config.md +4 -4
- data/docs/v6_upgrade.md +9 -8
- data/lib/install/template.rb +0 -9
- data/lib/webpacker/compiler.rb +2 -2
- data/lib/webpacker/helper.rb +14 -0
- data/lib/webpacker/version.rb +1 -1
- data/package/environments/base.js +2 -5
- data/package.json +1 -3
- data/test/helper_test.rb +27 -0
- data/yarn.lock +0 -12
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 92baeec1396c0616c20a1aad6d7b45f81776c825c684cf585ca2511602b9f60e
|
|
4
|
+
data.tar.gz: 91f7b0d550b5334d6284636b984bdb55f9feb5cd72211254be5c50b4afae2b27
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5ccc02bd10d28bf68b1b38fba51769c71c23aa874f5922516c9804088d179163fd25b8ac5e2da48325d5fbdffe65467c409848ef5086551ffee60c8021fcb444
|
|
7
|
+
data.tar.gz: e035005d2e37ccad4a0bdd7cde26059fc1dd00d840d8d487866de0f175c083d26a6c427eb663065d4190a47608bf7572c29752c2d1ce52a50986504bee0c8970
|
data/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,30 @@
|
|
|
1
|
-
For versions prior to v6, see the [5.x stable branch of rails/webpacker](https://github.com/rails/webpacker/tree/5-x-stable).
|
|
2
|
-
|
|
1
|
+
* For versions prior to v6, see the [5.x stable branch of rails/webpacker](https://github.com/rails/webpacker/tree/5-x-stable).
|
|
2
|
+
* Please see [UPGRADE GUIDE](./docs/v6_upgrade.md).
|
|
3
3
|
|
|
4
4
|
## Versions
|
|
5
5
|
### [Unreleased]
|
|
6
6
|
Changes since last non-beta release.
|
|
7
7
|
|
|
8
8
|
*Please add entries here for your pull requests that are not yet released.*
|
|
9
|
+
## [v6.0.2] - January 25, 2022
|
|
10
|
+
### Improved
|
|
11
|
+
- Fix incorrect command name in warning. [PR 33](https://github.com/shakacode/shakapacker/pull/33) by [tricknotes](https://github.com/tricknotes).
|
|
12
|
+
|
|
13
|
+
## [v6.0.1] - January 24, 2022
|
|
14
|
+
### Improved
|
|
15
|
+
- PR #21 removed pnp-webpack-plugin as a dev dependency but did not remove it from the peer dependency list. [PR 30](https://github.com/shakacode/shakapacker/pull/30) by [t27duck](https://github.com/t27duck).
|
|
16
|
+
|
|
17
|
+
## [v6.0.0 changes from v6.0.0.rc.6] - January 22, 2022
|
|
18
|
+
|
|
19
|
+
### Improved
|
|
20
|
+
- Raise on multiple invocations of javascript_pack_tag and stylesheet_pack_tag helpers. [PR 19](https://github.com/shakacode/shakapacker/pull/19) by [tomdracz](https://github.com/tomdracz).
|
|
21
|
+
- Remove automatic addition of node_modules into rails asset load path. [PR 20](https://github.com/shakacode/shakapacker/pull/20) by [tomdracz](https://github.com/tomdracz).
|
|
22
|
+
- Remove pnp-webpack-plugin. [PR 21](https://github.com/shakacode/shakapacker/pull/21) by [tomdracz](https://github.com/tomdracz).
|
|
9
23
|
|
|
10
|
-
## [6.0.0.rc.12]
|
|
11
24
|
|
|
12
25
|
### Merged from rails/webpacker
|
|
13
26
|
|
|
14
|
-
- Make watched_files_digest thread safe. [rails/webpacker #3233](https://github.com/rails/webpacker/pull/3233)
|
|
27
|
+
- Make watched_files_digest thread safe. [rails/webpacker #3233](https://github.com/rails/webpacker/pull/3233)
|
|
15
28
|
- Use single webpack config webpack.config.js. [rails/webpacker #3240](https://github.com/rails/webpacker/pull/3240)
|
|
16
29
|
- Switch to peer dependencies. [rails/webpacker #3234](https://github.com/rails/webpacker/pull/3234)
|
|
17
30
|
|
|
@@ -20,11 +33,9 @@ Changes since last non-beta release.
|
|
|
20
33
|
to `config/webpack/#{NODE_ENV}.js`.
|
|
21
34
|
- Changed all package.json dependencies to peerDependencies, so upgrading requires adding the dependencies, per the [UPGRADE GUIDE](./docs/v6_upgrade.md).
|
|
22
35
|
|
|
23
|
-
## [
|
|
36
|
+
## [v6.0.0.rc.6 changes from v5.4] - Forked January 16, 2022
|
|
24
37
|
|
|
25
|
-
Latest is rc.9.
|
|
26
38
|
|
|
27
|
-
Please see [UPGRADE GUIDE](./docs/v6_upgrade.md) for more information.
|
|
28
39
|
- `node_modules` will no longer be babel transfomed compiled by default. This primarily fixes [rails issue #35501](https://github.com/rails/rails/issues/35501) as well as [numerous other webpacker issues](https://github.com/rails/webpacker/issues/2131#issuecomment-581618497). The disabled loader can still be required explicitly via:
|
|
29
40
|
|
|
30
41
|
```js
|
|
@@ -48,6 +59,8 @@ Please see [UPGRADE GUIDE](./docs/v6_upgrade.md) for more information.
|
|
|
48
59
|
- CSS extraction enabled by default, except when devServer is configured and running
|
|
49
60
|
|
|
50
61
|
|
|
51
|
-
[Unreleased]: https://github.com/shakacode/shakapacker/compare/6.0.
|
|
52
|
-
[
|
|
53
|
-
[
|
|
62
|
+
[Unreleased]: https://github.com/shakacode/shakapacker/compare/6.0.2...master
|
|
63
|
+
[v6.0.2]: https://github.com/shakacode/shakapacker/compare/v6.0.1...v6.0.2
|
|
64
|
+
[v6.0.1]: https://github.com/shakacode/shakapacker/compare/v6.0.0...v6.0.1
|
|
65
|
+
[v6.0.0 changes from v6.0.0.rc.6]: https://github.com/shakacode/shakapacker/compare/aba79635e6ff6562ec04d3c446d57ef19a5fef7d...v6.0.0
|
|
66
|
+
[v6.0.0.rc.6 changes from v5.4]: https://github.com/rails/webpacker/compare/v5.4.3...aba79635e6ff6562ec04d3c446d57ef19a5fef7d
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# Shakapacker
|
|
2
2
|
|
|
3
|
-
_Official, actively maintained fork of [rails/webpacker](https://github.com/rails/webpacker).
|
|
4
|
-
|
|
5
|
-
* Note, internal naming will continue to use `webpacker` where possible.
|
|
6
|
-
* See [V6 Upgrade](./docs/v6_upgrade.md) for upgrading from v5 or prior v6 releases.
|
|
3
|
+
_Official, actively maintained fork of [rails/webpacker](https://github.com/rails/webpacker). Internal naming for `shakapacker` will continue to use `webpacker` where possible. Notably, the NPM package name is `shakapacker`._
|
|
4
|
+
* See [V6 Upgrade](./docs/v6_upgrade.md) for upgrading from v5 or prior v6 releases.
|
|
7
5
|
|
|
8
6
|
[](https://github.com/shakacode/shakapacker/actions)
|
|
9
7
|
[](https://github.com/shakacode/shakapacker/actions)
|
|
@@ -12,6 +10,7 @@ _Official, actively maintained fork of [rails/webpacker](https://github.com/rail
|
|
|
12
10
|
|
|
13
11
|
[](https://www.npmjs.com/package/shakapacker)
|
|
14
12
|
[](https://rubygems.org/gems/shakapacker)
|
|
13
|
+
[](https://badge.fury.io/js/shakapacker)
|
|
15
14
|
|
|
16
15
|
Webpacker makes it easy to use the JavaScript pre-processor and bundler
|
|
17
16
|
[Webpack v5](https://webpack.js.org/)
|
|
@@ -33,12 +32,12 @@ Discussion forums to discuss debugging and troubleshooting tips. Please open iss
|
|
|
33
32
|
- [Features](#features)
|
|
34
33
|
- [Optional support](#optional-support)
|
|
35
34
|
- [Installation](#installation)
|
|
36
|
-
- [Rails v6](#rails-v6)
|
|
37
|
-
- [
|
|
38
|
-
- [Manual Installation Steps](#manual-installation-steps)
|
|
35
|
+
- [Rails v6+](#rails-v6)
|
|
36
|
+
- [Note for Sprockets usage](#note-for-sprockets-usage)
|
|
39
37
|
- [Usage](#usage)
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
- [View Helpers](#view-helpers)
|
|
39
|
+
- [Defer for `javascript_pack_tag`](#defer-for-javascript_pack_tag)
|
|
40
|
+
- [Server-Side Rendering (SSR)](#server-side-rendering-ssr)
|
|
42
41
|
- [Development](#development)
|
|
43
42
|
- [Webpack Configuration](#webpack-configuration)
|
|
44
43
|
- [Babel configuration](#babel-configuration)
|
|
@@ -55,9 +54,10 @@ Discussion forums to discuss debugging and troubleshooting tips. Please open iss
|
|
|
55
54
|
- [Other frameworks](#other-frameworks)
|
|
56
55
|
- [Custom Rails environments](#custom-rails-environments)
|
|
57
56
|
- [Upgrading](#upgrading)
|
|
58
|
-
- [Paths](#paths)
|
|
57
|
+
- [Paths](#paths)
|
|
59
58
|
- [Additional paths](#additional-paths)
|
|
60
59
|
- [Deployment](#deployment)
|
|
60
|
+
- [Example Apps](#example-apps)
|
|
61
61
|
- [Troubleshooting](#troubleshooting)
|
|
62
62
|
- [Contributing](#contributing)
|
|
63
63
|
- [License](#license)
|
|
@@ -72,49 +72,40 @@ Discussion forums to discuss debugging and troubleshooting tips. Please open iss
|
|
|
72
72
|
- Yarn
|
|
73
73
|
|
|
74
74
|
## Features
|
|
75
|
-
|
|
75
|
+
- Rails view helpers that fully support webpack output
|
|
76
|
+
- Convenient but not required webpack configuration. The only requirement is that your webpack configuration create a manifest.
|
|
77
|
+
- HMR with the webpack-dev-server, such as for hot-reloading for React!
|
|
78
|
+
- Automatic code splitting using multiple entry points to optimize JavaScript downloads
|
|
76
79
|
- [Webpack v5](https://webpack.js.org/)
|
|
77
80
|
- ES6 with [babel](https://babeljs.io/)
|
|
78
|
-
- Automatic code splitting using multiple entry points
|
|
79
81
|
- Asset compression, source-maps, and minification
|
|
80
82
|
- CDN support
|
|
81
|
-
-
|
|
82
|
-
- Extensible and configurable
|
|
83
|
+
- Extensible and configurable. For example, all major dependencies are specified as peers, so you can upgrade easily.
|
|
83
84
|
|
|
84
85
|
### Optional support
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- TypeScript
|
|
91
|
-
- React
|
|
86
|
+
_Requires extra packages to be installed._
|
|
87
|
+
- React
|
|
88
|
+
- TypeScript
|
|
89
|
+
- Stylesheets - Sass, Less, Stylus and Css, PostCSS
|
|
90
|
+
- CoffeeScript
|
|
92
91
|
|
|
93
92
|
## Installation
|
|
94
93
|
|
|
95
|
-
### Rails v6
|
|
96
|
-
With Rails v6, webpacker is installed by default:
|
|
97
|
-
```bash
|
|
98
|
-
rails new myapp
|
|
99
|
-
```
|
|
100
94
|
|
|
101
|
-
### Rails
|
|
95
|
+
### Rails v6+
|
|
102
96
|
|
|
103
|
-
With Rails
|
|
97
|
+
With Rails v6+, skip JavaScript for a new app and follow below Manual Installation Steps to manually add the `shakapacker` gem to your Gemfile.
|
|
104
98
|
```bash
|
|
105
99
|
rails new myapp --skip-javascript
|
|
106
100
|
```
|
|
107
101
|
|
|
108
|
-
|
|
102
|
+
_Note, Rails 6 installs the older v5 version of webpacker unless you specify `--skip-javascript`._
|
|
103
|
+
|
|
109
104
|
Update your `Gemfile`:
|
|
110
105
|
|
|
111
106
|
```ruby
|
|
112
107
|
# Gemfile
|
|
113
108
|
gem 'shakapacker', '~> 6.0'
|
|
114
|
-
|
|
115
|
-
# OR if you prefer to use master
|
|
116
|
-
gem 'shakapacker', git: 'https://github.com/shakacode/shakapacker.git'
|
|
117
|
-
yarn add https://github.com/shakacode/shakapacker.git
|
|
118
109
|
```
|
|
119
110
|
|
|
120
111
|
Then running the following to install Webpacker:
|
|
@@ -134,15 +125,26 @@ Note, in v6, most JS packages are peer dependencies. Thus, the installer will ad
|
|
|
134
125
|
|
|
135
126
|
```bash
|
|
136
127
|
yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader \
|
|
137
|
-
compression-webpack-plugin
|
|
128
|
+
compression-webpack-plugin terser-webpack-plugin \
|
|
138
129
|
webpack webpack-assets-manifest webpack-cli webpack-merge webpack-sources webpack-dev-server
|
|
139
130
|
```
|
|
140
131
|
|
|
141
132
|
Previously, these "webpack" and "babel" packages were direct dependencies for `webpacker`. By
|
|
142
133
|
making these peer dependencies, you have control over the versions used in your webpack and babel configs.
|
|
143
134
|
|
|
135
|
+
### Note for Sprockets usage
|
|
136
|
+
|
|
137
|
+
If you are still using Sprockets for some of your assets, you might want to include files from `node_modules` directory in your asset pipeline. This is useful, for example, if you want to reference a stylesheet from a node package in your `.scss` stylesheet.
|
|
138
|
+
|
|
139
|
+
In order to enable this, make sure you add `node_modules` to the asset load path by adding the following in an initializer (for example `config/initializers/assets.rb`)
|
|
140
|
+
```ruby
|
|
141
|
+
Rails.application.config.assets.paths << Rails.root.join('node_modules')
|
|
142
|
+
```
|
|
143
|
+
|
|
144
144
|
## Usage
|
|
145
145
|
|
|
146
|
+
### View Helpers
|
|
147
|
+
|
|
146
148
|
Once installed, you can start writing modern ES6-flavored JavaScript apps right away:
|
|
147
149
|
|
|
148
150
|
```yml
|
|
@@ -180,7 +182,7 @@ The result looks like this:
|
|
|
180
182
|
<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload" defer></script>
|
|
181
183
|
```
|
|
182
184
|
|
|
183
|
-
**Important:** Pass all your pack names as multiple arguments, not multiple calls, when using `javascript_pack_tag` and the
|
|
185
|
+
**Important:** Pass all your pack names as multiple arguments, not multiple calls, when using `javascript_pack_tag` and the `stylesheet_pack_tag`. Otherwise, you will get duplicated chunks on the page. Be especially careful if you might be calling these view helpers from your view, partials, and the layout for a page. You will need some logic to ensure you call the helpers only once with multiple arguments.
|
|
184
186
|
|
|
185
187
|
```erb
|
|
186
188
|
<%# DO %>
|
|
@@ -222,10 +224,10 @@ If you want to use images in your stylesheets:
|
|
|
222
224
|
background-image: url('../images/logo.svg')
|
|
223
225
|
}
|
|
224
226
|
```
|
|
225
|
-
|
|
227
|
+
### Defer for `javascript_pack_tag`
|
|
226
228
|
Note, the default of "defer" for the `javascript_pack_tag`. You can override that to `false`. If you expose jquery globally with `expose-loader,` by using `import $ from "expose-loader?exposes=$,jQuery!jquery"` in your `app/packs/entrypoints/application.js`, pass the option `defer: false` to your `javascript_pack_tag`.
|
|
227
229
|
|
|
228
|
-
|
|
230
|
+
### Server-Side Rendering (SSR)
|
|
229
231
|
|
|
230
232
|
Note, if you are using server-side rendering of JavaScript with dynamic code-splitting, as is often done with extensions to Webpacker, like [React on Rails](https://github.com/shakacode/react_on_rails), your JavaScript should create the link prefetch HTML tags that you will use, so you won't need to use to `asset_pack_path` in those circumstances.
|
|
231
233
|
|
|
@@ -286,11 +288,33 @@ end
|
|
|
286
288
|
|
|
287
289
|
### Webpack Configuration
|
|
288
290
|
|
|
289
|
-
|
|
291
|
+
First, you don't _need_ to use Shakapacker's webpack configuration. However, the `shakapacker` NPM package provides convenient access to configuration code that reads the `config/webpacker.yml` file which the view helpers also use. If you have your own customized webpack configuration, at the mininmum, you must ensure:
|
|
290
292
|
|
|
291
|
-
|
|
293
|
+
1. Your output files go the right directory
|
|
294
|
+
2. You provide a manifest, via package [`webpack-assets-manifest`](https://github.com/webdeveric/webpack-assets-manifest) that maps output names (your 'packs') to the fingerprinted versions, including bundle-splitting dependencies. That's the main secret sauce of webpacker!
|
|
292
295
|
|
|
293
|
-
|
|
296
|
+
The most practical webpack configuration is to take the default from Shakapacker and then use [webpack-merge](https://github.com/survivejs/webpack-merge) to merge your customizations with the default. For example, suppose you want to add some `resolve.extensions`:
|
|
297
|
+
|
|
298
|
+
```js
|
|
299
|
+
// use the new NPM package name, `shakapacker`.
|
|
300
|
+
// merge is webpack-merge from https://github.com/survivejs/webpack-merge
|
|
301
|
+
const { webpackConfig: baseWebpackConfig, merge } = require('shakapacker')
|
|
302
|
+
|
|
303
|
+
const options = {
|
|
304
|
+
resolve: {
|
|
305
|
+
extensions: ['.css', '.ts', '.tsx']
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Copy the object using merge b/c the baseClientWebpackConfig is a mutable global
|
|
310
|
+
// If you want to use this object for client and server rendering configurations,
|
|
311
|
+
// havaing a new object is essential.
|
|
312
|
+
module.exports = merge({}, baseWebpackConfig, options)
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
This example is based on [an example project](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/webpack.config.js)
|
|
316
|
+
|
|
317
|
+
Webpacker gives you a default configuration file `config/webpack/webpack.config.js`, which, by default, you don't need to make any changes to `config/webpack/webpack.config.js` since it's a standard production-ready configuration. However, you will probably want to customize or add a new loader by modifying the webpack configuration, as shown above.
|
|
294
318
|
|
|
295
319
|
You might add separate files to keep your code more organized.
|
|
296
320
|
|
|
@@ -313,6 +337,7 @@ Then `require` this file in your `config/webpack/webpack.config.js`:
|
|
|
313
337
|
|
|
314
338
|
```js
|
|
315
339
|
// config/webpack/webpack.config.js
|
|
340
|
+
// use the new NPM package name, `shakapacker`.
|
|
316
341
|
const { webpackConfig, merge } = require('shakapacker')
|
|
317
342
|
const customConfig = require('./custom')
|
|
318
343
|
|
|
@@ -334,7 +359,7 @@ console.log(JSON.stringify(webpackConfig, undefined, 2))
|
|
|
334
359
|
|
|
335
360
|
### Babel configuration
|
|
336
361
|
|
|
337
|
-
By default, you will find the Webpacker preset in your `package.json`.
|
|
362
|
+
By default, you will find the Webpacker preset in your `package.json`. Note, you need to use the new NPM package name, `shakapacker`.
|
|
338
363
|
|
|
339
364
|
```json
|
|
340
365
|
"babel": {
|
|
@@ -521,7 +546,6 @@ const vueConfig = require('./rules/vue')
|
|
|
521
546
|
module.exports = merge(vueConfig, webpackConfig)
|
|
522
547
|
```
|
|
523
548
|
|
|
524
|
-
|
|
525
549
|
### Custom Rails environments
|
|
526
550
|
|
|
527
551
|
Out of the box Webpacker ships with - development, test and production environments in `config/webpacker.yml` however, in most production apps extra environments are needed as part of deployment workflow. Webpacker supports this out of the box from version 3.4.0+ onwards.
|
|
@@ -574,7 +598,7 @@ You can run following commands to upgrade Webpacker to the latest stable version
|
|
|
574
598
|
|
|
575
599
|
```bash
|
|
576
600
|
# check your Gemfile for version restrictions
|
|
577
|
-
bundle update
|
|
601
|
+
bundle update shakapacker
|
|
578
602
|
|
|
579
603
|
# overwrite your changes to the default install files and revert any unwanted changes from the install
|
|
580
604
|
rails webpacker:install
|
|
@@ -593,7 +617,7 @@ yarn add shakapacker@next
|
|
|
593
617
|
|
|
594
618
|
Also, consult the [CHANGELOG](./CHANGELOG.md) for additional upgrade links.
|
|
595
619
|
|
|
596
|
-
|
|
620
|
+
### Paths
|
|
597
621
|
|
|
598
622
|
By default, Webpacker ships with simple conventions for where the JavaScript app files and compiled webpack bundles will go in your Rails app. All these options are configurable from `config/webpacker.yml` file.
|
|
599
623
|
|
|
@@ -649,18 +673,17 @@ When compiling assets for production on a remote server, such as a continuous in
|
|
|
649
673
|
|
|
650
674
|
If you are using a CDN setup, webpacker will use the configured [asset host](https://guides.rubyonrails.org/configuring.html#rails-general-configuration) value to prefix URLs for images or font icons which are included inside JS code or CSS. It is possible to override this value during asset compilation by setting the `WEBPACKER_ASSET_HOST` environment variable.
|
|
651
675
|
|
|
676
|
+
## Example Apps
|
|
677
|
+
* [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh)
|
|
678
|
+
|
|
652
679
|
|
|
653
680
|
## Troubleshooting
|
|
654
681
|
|
|
655
682
|
See the doc page for [Troubleshooting](./docs/troubleshooting.md).
|
|
656
683
|
|
|
657
|
-
|
|
658
684
|
## Contributing
|
|
659
685
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
We encourage you to contribute to Webpacker! See [CONTRIBUTING](CONTRIBUTING.md) for guidelines about how to proceed.
|
|
663
|
-
|
|
686
|
+
We encourage you to contribute to Shakapacker/Webpacker! See [CONTRIBUTING](CONTRIBUTING.md) for guidelines about how to proceed. We have a [Slack discussion channel](https://reactrails.slack.com/join/shared_invite/enQtNjY3NTczMjczNzYxLTlmYjdiZmY3MTVlMzU2YWE0OWM0MzNiZDI0MzdkZGFiZTFkYTFkOGVjODBmOWEyYWQ3MzA2NGE1YWJjNmVlMGE).
|
|
664
687
|
|
|
665
688
|
## License
|
|
666
689
|
|
|
@@ -39,14 +39,14 @@ module.exports = function (api) {
|
|
|
39
39
|
development: isDevelopmentEnv || isTestEnv,
|
|
40
40
|
useBuiltIns: true
|
|
41
41
|
}
|
|
42
|
-
]
|
|
42
|
+
]
|
|
43
|
+
].filter(Boolean),
|
|
44
|
+
plugins: [
|
|
43
45
|
isProductionEnv && ['babel-plugin-transform-react-remove-prop-types',
|
|
44
46
|
{
|
|
45
47
|
removeImport: true
|
|
46
48
|
}
|
|
47
|
-
]
|
|
48
|
-
].filter(Boolean),
|
|
49
|
-
plugins: [
|
|
49
|
+
],
|
|
50
50
|
process.env.WEBPACK_SERVE && 'react-refresh/babel'
|
|
51
51
|
].filter(Boolean),
|
|
52
52
|
}
|
data/docs/v6_upgrade.md
CHANGED
|
@@ -11,12 +11,13 @@ Webpacker used to configure Webpack indirectly, which lead to a [complicated sec
|
|
|
11
11
|
This means you have to configure integration with frameworks yourself, but webpack-merge helps with this. See this example for [Vue](https://github.com/shakacode/shakapacker#other-frameworks) and scroll to the bottom for [more examples](#examples-of-v5-to-v6).
|
|
12
12
|
|
|
13
13
|
## webpacker v6.0.0.rc.6 to shakapacker
|
|
14
|
-
See example migration
|
|
14
|
+
See an example migration here: [PR 27](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/pull/27).
|
|
15
15
|
|
|
16
16
|
### Update
|
|
17
|
-
1. Peer dependencies. Run `yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
1. Peer dependencies. Run `yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin terser-webpack-plugin webpack webpack-assets-manifest webpack-cli webpack-merge webpack-sources webpack-dev-server`
|
|
18
|
+
1. Update any scripts that called `bin/webpack` or `bin/webpack-dev-server` to `bin/webpacker` or `bin/webpacker-dev-server`
|
|
19
|
+
1. Update your webpack config for a single config file, `config/webpack/webpack.config.js`.
|
|
20
|
+
1. Update `babel.config.js` if you need JSX support.
|
|
20
21
|
|
|
21
22
|
## How to upgrade to Webpacker v6 from v5
|
|
22
23
|
1. Ensure you have a clean working git branch. You will be overwriting all your files and reverting the changes that you don't want.
|
|
@@ -41,13 +42,13 @@ See example migration, [PR 27](https://github.com/shakacode/react_on_rails_tutor
|
|
|
41
42
|
|
|
42
43
|
1. Upgrade the Webpacker Ruby gem and the NPM package
|
|
43
44
|
|
|
44
|
-
Note: [Check the
|
|
45
|
+
Note: [Check the gem page to verify the latest version](https://rubygems.org/gems/shakapacker), and make sure to install identical version numbers of `shakapacker` gem and package. (Gems use a period and packages use a dot between the main version number and the beta version.)
|
|
45
46
|
|
|
46
47
|
Example going to a specific version:
|
|
47
48
|
|
|
48
49
|
```ruby
|
|
49
50
|
# Gemfile
|
|
50
|
-
gem 'shakapacker', '6.0.0.rc.13'
|
|
51
|
+
gem 'shakapacker', '6.0.0.rc.13'
|
|
51
52
|
```
|
|
52
53
|
|
|
53
54
|
```bash
|
|
@@ -55,7 +56,7 @@ See example migration, [PR 27](https://github.com/shakacode/react_on_rails_tutor
|
|
|
55
56
|
```
|
|
56
57
|
|
|
57
58
|
```bash
|
|
58
|
-
yarn add shakapacker@6.0.0-rc.
|
|
59
|
+
yarn add shakapacker@6.0.0-rc.13 --exact
|
|
59
60
|
```
|
|
60
61
|
|
|
61
62
|
```bash
|
|
@@ -66,7 +67,7 @@ See example migration, [PR 27](https://github.com/shakacode/react_on_rails_tutor
|
|
|
66
67
|
|
|
67
68
|
Note, the webpacker:install will install the peer dependencies:
|
|
68
69
|
```bash
|
|
69
|
-
yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin
|
|
70
|
+
yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin terser-webpack-plugin webpack webpack-assets-manifest webpack-cli webpack-merge webpack-sources webpack-dev-server
|
|
70
71
|
```
|
|
71
72
|
|
|
72
73
|
1. There is now a single default configuration file of `config/webpack/webpack.config.js`. Previously, the config file was set
|
data/lib/install/template.rb
CHANGED
|
@@ -45,15 +45,6 @@ if (setup_path = Rails.root.join("bin/setup")).exist?
|
|
|
45
45
|
RUBY
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
if (asset_config_path = Rails.root.join("config/initializers/assets.rb")).exist?
|
|
49
|
-
say "Add node_modules to the asset load path"
|
|
50
|
-
append_to_file asset_config_path, <<-RUBY
|
|
51
|
-
|
|
52
|
-
# Add node_modules folder to the asset load path.
|
|
53
|
-
Rails.application.config.assets.paths << Rails.root.join("node_modules")
|
|
54
|
-
RUBY
|
|
55
|
-
end
|
|
56
|
-
|
|
57
48
|
if (csp_config_path = Rails.root.join("config/initializers/content_security_policy.rb")).exist?
|
|
58
49
|
say "Make note of webpack-dev-server exemption needed to csp"
|
|
59
50
|
insert_into_file csp_config_path, <<-RUBY, after: %(# Rails.application.config.content_security_policy do |policy|)
|
data/lib/webpacker/compiler.rb
CHANGED
|
@@ -57,8 +57,8 @@ class Webpacker::Compiler
|
|
|
57
57
|
Webpacker::Compiler - Slow setup for development
|
|
58
58
|
|
|
59
59
|
Prepare JS assets with either:
|
|
60
|
-
1. Running `bin/
|
|
61
|
-
2. Set `compile` to false in webpacker.yml and run `bin/
|
|
60
|
+
1. Running `bin/webpacker-dev-server`
|
|
61
|
+
2. Set `compile` to false in webpacker.yml and run `bin/webpacker -w`
|
|
62
62
|
MSG
|
|
63
63
|
end
|
|
64
64
|
|
data/lib/webpacker/helper.rb
CHANGED
|
@@ -96,6 +96,13 @@ module Webpacker::Helper
|
|
|
96
96
|
# <%= javascript_pack_tag 'calendar' %>
|
|
97
97
|
# <%= javascript_pack_tag 'map' %>
|
|
98
98
|
def javascript_pack_tag(*names, defer: true, **options)
|
|
99
|
+
if @javascript_pack_tag_loaded
|
|
100
|
+
raise "To prevent duplicated chunks on the page, you should call javascript_pack_tag only once on the page. " \
|
|
101
|
+
"Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#usage for the usage guide"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
@javascript_pack_tag_loaded = true
|
|
105
|
+
|
|
99
106
|
javascript_include_tag(*sources_from_manifest_entrypoints(names, type: :javascript), **options.tap { |o| o[:defer] = defer })
|
|
100
107
|
end
|
|
101
108
|
|
|
@@ -141,6 +148,13 @@ module Webpacker::Helper
|
|
|
141
148
|
# <%= stylesheet_pack_tag 'calendar' %>
|
|
142
149
|
# <%= stylesheet_pack_tag 'map' %>
|
|
143
150
|
def stylesheet_pack_tag(*names, **options)
|
|
151
|
+
if @stylesheet_pack_tag_loaded
|
|
152
|
+
raise "To prevent duplicated chunks on the page, you should call stylesheet_pack_tag only once on the page. " \
|
|
153
|
+
"Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#usage for the usage guide"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
@stylesheet_pack_tag_loaded = true
|
|
157
|
+
|
|
144
158
|
return "" if Webpacker.inlining_css?
|
|
145
159
|
|
|
146
160
|
stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
|
data/lib/webpacker/version.rb
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
const { basename, dirname, join, relative, resolve } = require('path')
|
|
5
5
|
const extname = require('path-complete-extname')
|
|
6
|
-
const PnpWebpackPlugin = require('pnp-webpack-plugin')
|
|
7
6
|
const { sync: globSync } = require('glob')
|
|
8
7
|
const WebpackAssetsManifest = require('webpack-assets-manifest')
|
|
9
8
|
const webpack = require('webpack')
|
|
@@ -92,15 +91,13 @@ module.exports = {
|
|
|
92
91
|
entry: getEntryObject(),
|
|
93
92
|
resolve: {
|
|
94
93
|
extensions: ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.coffee'],
|
|
95
|
-
modules: getModulePaths()
|
|
96
|
-
plugins: [PnpWebpackPlugin]
|
|
94
|
+
modules: getModulePaths()
|
|
97
95
|
},
|
|
98
96
|
|
|
99
97
|
plugins: getPlugins(),
|
|
100
98
|
|
|
101
99
|
resolveLoader: {
|
|
102
|
-
modules: ['node_modules']
|
|
103
|
-
plugins: [PnpWebpackPlugin.moduleLoader(module)]
|
|
100
|
+
modules: ['node_modules']
|
|
104
101
|
},
|
|
105
102
|
|
|
106
103
|
optimization: {
|
data/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shakapacker",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"description": "Use webpack to manage app-like JavaScript modules in Rails",
|
|
5
5
|
"main": "package/index.js",
|
|
6
6
|
"files": [
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"@babel/runtime": "^7.15.4",
|
|
19
19
|
"babel-loader": "^8.2.2",
|
|
20
20
|
"compression-webpack-plugin": "^9.0.0",
|
|
21
|
-
"pnp-webpack-plugin": "^1.7.0",
|
|
22
21
|
"terser-webpack-plugin": "^5.2.4",
|
|
23
22
|
"webpack": "^5.53.0",
|
|
24
23
|
"webpack-assets-manifest": "^5.0.6",
|
|
@@ -40,7 +39,6 @@
|
|
|
40
39
|
"eslint-plugin-jsx-a11y": "^6.4.1",
|
|
41
40
|
"eslint-plugin-react": "^7.26.0",
|
|
42
41
|
"jest": "^27.2.1",
|
|
43
|
-
"pnp-webpack-plugin": "^1.7.0",
|
|
44
42
|
"webpack": "^5.53.0",
|
|
45
43
|
"webpack-assets-manifest": "^5.0.6",
|
|
46
44
|
"webpack-merge": "^5.8.0"
|
data/test/helper_test.rb
CHANGED
|
@@ -12,6 +12,9 @@ class HelperTest < ActionView::TestCase
|
|
|
12
12
|
"https://example.com"
|
|
13
13
|
end
|
|
14
14
|
end.new
|
|
15
|
+
|
|
16
|
+
@javascript_pack_tag_loaded = nil
|
|
17
|
+
@stylesheet_pack_tag_loaded = nil
|
|
15
18
|
end
|
|
16
19
|
|
|
17
20
|
def test_asset_pack_path
|
|
@@ -129,6 +132,18 @@ class HelperTest < ActionView::TestCase
|
|
|
129
132
|
javascript_pack_tag(:application)
|
|
130
133
|
end
|
|
131
134
|
|
|
135
|
+
def test_javascript_pack_tag_multiple_invocations
|
|
136
|
+
error = assert_raises do
|
|
137
|
+
javascript_pack_tag(:application)
|
|
138
|
+
javascript_pack_tag(:bootstrap)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
assert_equal \
|
|
142
|
+
"To prevent duplicated chunks on the page, you should call javascript_pack_tag only once on the page. " +
|
|
143
|
+
"Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#usage for the usage guide",
|
|
144
|
+
error.message
|
|
145
|
+
end
|
|
146
|
+
|
|
132
147
|
def application_stylesheet_chunks
|
|
133
148
|
%w[/packs/1-c20632e7baf2c81200d3.chunk.css /packs/application-k344a6d59eef8632c9d1.chunk.css]
|
|
134
149
|
end
|
|
@@ -156,4 +171,16 @@ class HelperTest < ActionView::TestCase
|
|
|
156
171
|
(application_stylesheet_chunks).map { |chunk| stylesheet_link_tag(chunk, media: "all") }.join("\n"),
|
|
157
172
|
stylesheet_pack_tag("application", media: "all")
|
|
158
173
|
end
|
|
174
|
+
|
|
175
|
+
def test_stylesheet_pack_tag_multiple_invocations
|
|
176
|
+
error = assert_raises do
|
|
177
|
+
stylesheet_pack_tag(:application)
|
|
178
|
+
stylesheet_pack_tag(:hello_stimulus)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
assert_equal \
|
|
182
|
+
"To prevent duplicated chunks on the page, you should call stylesheet_pack_tag only once on the page. " +
|
|
183
|
+
"Please refer to https://github.com/shakacode/shakapacker/blob/master/README.md#usage for the usage guide",
|
|
184
|
+
error.message
|
|
185
|
+
end
|
|
159
186
|
end
|
data/yarn.lock
CHANGED
|
@@ -3215,13 +3215,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
|
|
|
3215
3215
|
dependencies:
|
|
3216
3216
|
find-up "^4.0.0"
|
|
3217
3217
|
|
|
3218
|
-
pnp-webpack-plugin@^1.7.0:
|
|
3219
|
-
version "1.7.0"
|
|
3220
|
-
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9"
|
|
3221
|
-
integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==
|
|
3222
|
-
dependencies:
|
|
3223
|
-
ts-pnp "^1.1.6"
|
|
3224
|
-
|
|
3225
3218
|
prelude-ls@^1.2.1:
|
|
3226
3219
|
version "1.2.1"
|
|
3227
3220
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
|
@@ -3730,11 +3723,6 @@ tr46@^2.1.0:
|
|
|
3730
3723
|
dependencies:
|
|
3731
3724
|
punycode "^2.1.1"
|
|
3732
3725
|
|
|
3733
|
-
ts-pnp@^1.1.6:
|
|
3734
|
-
version "1.2.0"
|
|
3735
|
-
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
|
|
3736
|
-
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
|
|
3737
|
-
|
|
3738
3726
|
tsconfig-paths@^3.12.0:
|
|
3739
3727
|
version "3.12.0"
|
|
3740
3728
|
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: shakapacker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.0.
|
|
4
|
+
version: 6.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2022-01-
|
|
13
|
+
date: 2022-01-25 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: activesupport
|
|
@@ -269,7 +269,7 @@ homepage: https://github.com/shakacode/shakapacker
|
|
|
269
269
|
licenses:
|
|
270
270
|
- MIT
|
|
271
271
|
metadata:
|
|
272
|
-
source_code_uri: https://github.com/shakacode/shakapacker/tree/v6.0.
|
|
272
|
+
source_code_uri: https://github.com/shakacode/shakapacker/tree/v6.0.2
|
|
273
273
|
post_install_message:
|
|
274
274
|
rdoc_options: []
|
|
275
275
|
require_paths:
|
|
@@ -281,9 +281,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
281
281
|
version: 2.7.0
|
|
282
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
283
283
|
requirements:
|
|
284
|
-
- - "
|
|
284
|
+
- - ">="
|
|
285
285
|
- !ruby/object:Gem::Version
|
|
286
|
-
version:
|
|
286
|
+
version: '0'
|
|
287
287
|
requirements: []
|
|
288
288
|
rubygems_version: 3.2.32
|
|
289
289
|
signing_key:
|