webpacker 3.2.0 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +28 -3
- data/Gemfile.lock +8 -9
- data/docs/deployment.md +2 -2
- data/docs/typescript.md +5 -33
- data/docs/webpack.md +5 -5
- data/lib/install/angular.rb +2 -17
- data/lib/install/coffee.rb +3 -0
- data/lib/install/config/webpacker.yml +0 -5
- data/lib/install/elm.rb +1 -1
- data/lib/install/erb.rb +4 -1
- data/lib/install/examples/react/tsconfig.json +20 -0
- data/lib/install/examples/typescript/hello_typescript.ts +4 -0
- data/lib/install/examples/{angular → typescript}/tsconfig.json +0 -0
- data/lib/install/examples/vue/hello_vue.js +3 -2
- data/lib/install/loaders/elm.js +1 -1
- data/lib/install/react.rb +3 -0
- data/lib/install/template.rb +8 -9
- data/lib/install/typescript.rb +46 -0
- data/lib/install/vue.rb +3 -0
- data/lib/tasks/installers.rake +19 -5
- data/lib/tasks/webpacker.rake +2 -1
- data/lib/tasks/webpacker/check_binstubs.rake +1 -1
- data/lib/tasks/webpacker/compile.rake +1 -1
- data/lib/tasks/webpacker/yarn_install.rake +2 -2
- data/lib/webpacker/dev_server.rb +6 -2
- data/lib/webpacker/helper.rb +14 -2
- data/lib/webpacker/railtie.rb +4 -2
- data/lib/webpacker/version.rb +1 -1
- data/package.json +10 -9
- data/package/environments/production.js +17 -10
- data/package/rules/file.js +1 -1
- data/test/dev_server_test.rb +7 -0
- data/test/test_app/config/webpacker.yml +0 -5
- data/yarn.lock +737 -393
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a54f5131894092cf3a3c2176cca4c3d2d99cb10
|
4
|
+
data.tar.gz: 82eb7c75ef0ce343c7e8bb8b66efffb92d9ba252
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '088e85d9e4d9534b51b55ec1c69db1cbee256ac5d965c8b49ce2d9f1a1c92ccf17ef22432e58ac52ffb78629aa2708429e5ad39e0277a4917ec9412242ed64af'
|
7
|
+
data.tar.gz: fdeab469b4ce1d04d34f7a33a810c286c0783ff69f1c8e95d4f7664fea6f9f02e0b67c4bb0b71db76e2732c42d1ba8afa8c8ea9234dd69ea76671c706fb4600e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
**Please note that Webpacker 3.1.0 and 3.1.1 has some serious bugs so please consider using either 3.0.2 or 3.2.0**
|
2
2
|
|
3
|
+
## [3.2.1] - 2018-01-21
|
4
|
+
|
5
|
+
- Disable dev server running? check if no dev server config is present in that environment [#1179](https://github.com/rails/webpacker/pull/1179)
|
6
|
+
|
7
|
+
- Fix checking 'webpack' binstub on Windows [#1123](https://github.com/rails/webpacker/pull/1123)
|
8
|
+
|
9
|
+
- silence yarn output if checking is successfull [#1131](https://github.com/rails/webpacker/pull/1131)
|
10
|
+
|
11
|
+
- Update uglifyJs plugin to support ES6 [#1194](https://github.com/rails/webpacker/pull/1194)
|
12
|
+
|
13
|
+
- Add typescript installer [#1145](https://github.com/rails/webpacker/pull/1145)
|
14
|
+
|
15
|
+
- Update default extensions and move to installer [#1181](https://github.com/rails/webpacker/pull/1181)
|
16
|
+
|
17
|
+
- Revert file loader [#1196](https://github.com/rails/webpacker/pull/1196)
|
18
|
+
|
19
|
+
|
3
20
|
## [3.2.0] - 2017-12-16
|
4
21
|
|
5
22
|
### To upgrade:
|
@@ -20,7 +37,7 @@ bundle exec rails webpacker:install:vue
|
|
20
37
|
bundle exec rails webpacker:install:angular
|
21
38
|
bundle exec rails webpacker:install:elm
|
22
39
|
bundle exec rails webpacker:install:erb
|
23
|
-
bundle exec rails webpacker:install
|
40
|
+
bundle exec rails webpacker:install:coffee
|
24
41
|
```
|
25
42
|
|
26
43
|
Or simply copy required loaders used in your app from
|
@@ -42,6 +59,14 @@ environment.loaders.append('elm', elm)
|
|
42
59
|
environment.loaders.append('erb', erb)
|
43
60
|
```
|
44
61
|
|
62
|
+
In `.postcssrc.yml` you need to change the plugin name from `postcss-smart-import` to `postcss-import`:
|
63
|
+
|
64
|
+
```yml
|
65
|
+
plugins:
|
66
|
+
postcss-import: {}
|
67
|
+
postcss-cssnext: {}
|
68
|
+
```
|
69
|
+
|
45
70
|
### Added (npm module)
|
46
71
|
|
47
72
|
- Upgrade gems and webpack dependencies
|
@@ -69,7 +94,7 @@ environment.loaders.append('erb', erb)
|
|
69
94
|
|
70
95
|
```bash
|
71
96
|
bundle exec rails webpacker:install:erb
|
72
|
-
bundle exec rails webpacker:install
|
97
|
+
bundle exec rails webpacker:install:coffee
|
73
98
|
```
|
74
99
|
|
75
100
|
- Resolved paths from webpacker.yml to compiler watched list
|
@@ -143,7 +168,7 @@ files.
|
|
143
168
|
const sassLoader = environment.loaders.get('sass')
|
144
169
|
const cssLoader = sassLoader.use.find(loader => loader.loader === 'css-loader')
|
145
170
|
|
146
|
-
cssLoader.options = Object.assign(cssLoader.options, {
|
171
|
+
cssLoader.options = Object.assign({}, cssLoader.options, {
|
147
172
|
modules: true,
|
148
173
|
localIdentName: '[path][name]__[local]--[hash:base64:5]'
|
149
174
|
})
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
webpacker (3.2.
|
4
|
+
webpacker (3.2.1)
|
5
5
|
activesupport (>= 4.2)
|
6
6
|
rack-proxy (>= 0.6.1)
|
7
7
|
railties (>= 4.2)
|
@@ -65,11 +65,11 @@ GEM
|
|
65
65
|
method_source (0.9.0)
|
66
66
|
mini_mime (1.0.0)
|
67
67
|
mini_portile2 (2.3.0)
|
68
|
-
minitest (5.
|
69
|
-
nio4r (2.
|
68
|
+
minitest (5.11.1)
|
69
|
+
nio4r (2.2.0)
|
70
70
|
nokogiri (1.8.1)
|
71
71
|
mini_portile2 (~> 2.3.0)
|
72
|
-
parallel (1.12.
|
72
|
+
parallel (1.12.1)
|
73
73
|
parser (2.4.0.2)
|
74
74
|
ast (~> 2.3)
|
75
75
|
powerpack (0.1.1)
|
@@ -101,14 +101,13 @@ GEM
|
|
101
101
|
method_source
|
102
102
|
rake (>= 0.8.7)
|
103
103
|
thor (>= 0.18.1, < 2.0)
|
104
|
-
rainbow (
|
105
|
-
rake
|
104
|
+
rainbow (3.0.0)
|
106
105
|
rake (12.3.0)
|
107
|
-
rubocop (0.
|
106
|
+
rubocop (0.52.1)
|
108
107
|
parallel (~> 1.10)
|
109
|
-
parser (>= 2.
|
108
|
+
parser (>= 2.4.0.2, < 3.0)
|
110
109
|
powerpack (~> 0.1)
|
111
|
-
rainbow (>= 2.2.2, <
|
110
|
+
rainbow (>= 2.2.2, < 4.0)
|
112
111
|
ruby-progressbar (~> 1.7)
|
113
112
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
114
113
|
ruby-progressbar (1.9.0)
|
data/docs/deployment.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Deployment
|
2
2
|
|
3
3
|
|
4
|
-
Webpacker hooks up a new `webpacker:compile` task to `assets:precompile`, which gets run whenever you run `assets:precompile`.
|
5
|
-
|
4
|
+
Webpacker hooks up a new `webpacker:compile` task to `assets:precompile`, which gets run whenever you run `assets:precompile`.
|
5
|
+
If you are not using Sprockets `webpacker:compile` is automatically aliased to `assets:precompile`. Remember to set NODE_ENV environment variable to production during deployment or when running the rake task.
|
6
6
|
|
7
7
|
The `javascript_pack_tag` and `stylesheet_pack_tag` helper method will automatically insert the correct HTML tag for compiled pack. Just like the asset pipeline does it.
|
8
8
|
|
data/docs/typescript.md
CHANGED
@@ -3,43 +3,15 @@
|
|
3
3
|
|
4
4
|
## Typescript with React
|
5
5
|
|
6
|
-
1. Setup react using Webpacker [react installer](#react). Then
|
7
|
-
for using typescript with React:
|
6
|
+
1. Setup react using Webpacker [react installer](#react). Then run the typescript installer
|
8
7
|
|
9
8
|
```bash
|
10
|
-
|
9
|
+
bundle exec rails webpacker:install:typescript
|
10
|
+
yarn add @types/react @types/react-dom
|
11
11
|
```
|
12
12
|
|
13
|
-
2.
|
14
|
-
|
15
|
-
``` json
|
16
|
-
{
|
17
|
-
"compilerOptions": {
|
18
|
-
"declaration": false,
|
19
|
-
"emitDecoratorMetadata": true,
|
20
|
-
"experimentalDecorators": true,
|
21
|
-
"lib": ["es6", "dom"],
|
22
|
-
"module": "es6",
|
23
|
-
"moduleResolution": "node",
|
24
|
-
"sourceMap": true,
|
25
|
-
"jsx": "react",
|
26
|
-
"target": "es5"
|
27
|
-
},
|
28
|
-
"exclude": [
|
29
|
-
"**/*.spec.ts",
|
30
|
-
"node_modules",
|
31
|
-
"vendor",
|
32
|
-
"public"
|
33
|
-
],
|
34
|
-
"compileOnSave": false
|
35
|
-
}
|
36
|
-
```
|
37
|
-
|
38
|
-
3. Finally add `.tsx` to the list of extensions in `config/webpacker.yml`
|
39
|
-
and rename your generated `hello_react.js` using react installer
|
40
|
-
to `hello_react.tsx` and make it valid typescript and now you can use
|
41
|
-
typescript, JSX with React.
|
42
|
-
|
13
|
+
2. Rename the generated `hello_react.js` to `hello_react.tsx`. Make the file valid typescript and
|
14
|
+
now you can use typescript, JSX with React.
|
43
15
|
|
44
16
|
|
45
17
|
## HTML templates with Typescript and Angular
|
data/docs/webpack.md
CHANGED
@@ -142,7 +142,10 @@ environment.loaders.insert('svg', {
|
|
142
142
|
}
|
143
143
|
}
|
144
144
|
])
|
145
|
-
}, {
|
145
|
+
}, { after: 'file' })
|
146
|
+
|
147
|
+
const fileLoader = environment.loaders.get('file')
|
148
|
+
fileLoader.exclude = /\.(svg)$/i
|
146
149
|
```
|
147
150
|
|
148
151
|
|
@@ -151,16 +154,13 @@ environment.loaders.insert('svg', {
|
|
151
154
|
```js
|
152
155
|
// config/webpack/loaders/url.js
|
153
156
|
|
154
|
-
const { assetHost } = require('@rails/webpacker')
|
155
|
-
|
156
157
|
module.exports = {
|
157
158
|
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
|
158
159
|
use: [{
|
159
160
|
loader: 'url-loader',
|
160
161
|
options: {
|
161
162
|
limit: 10000,
|
162
|
-
name: '[name]-[hash].[ext]'
|
163
|
-
publicPath: assetHost.publicPathWithHost
|
163
|
+
name: '[name]-[hash].[ext]'
|
164
164
|
}
|
165
165
|
}]
|
166
166
|
}
|
data/lib/install/angular.rb
CHANGED
@@ -1,27 +1,12 @@
|
|
1
1
|
require "webpacker/configuration"
|
2
2
|
|
3
|
-
say "Copying angular loader to config/webpack/loaders"
|
4
|
-
copy_file "#{__dir__}/loaders/typescript.js", Rails.root.join("config/webpack/loaders/typescript.js").to_s
|
5
|
-
|
6
|
-
say "Adding typescript loader to config/webpack/environment.js"
|
7
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
8
|
-
"const typescript = require('./loaders/typescript')\n",
|
9
|
-
after: "require('@rails/webpacker')\n"
|
10
|
-
|
11
|
-
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
12
|
-
"environment.loaders.append('typescript', typescript)\n",
|
13
|
-
before: "module.exports"
|
14
|
-
|
15
3
|
say "Copying angular example entry file to #{Webpacker.config.source_entry_path}"
|
16
4
|
copy_file "#{__dir__}/examples/angular/hello_angular.js", "#{Webpacker.config.source_entry_path}/hello_angular.js"
|
17
5
|
|
18
6
|
say "Copying hello_angular app to #{Webpacker.config.source_path}"
|
19
7
|
directory "#{__dir__}/examples/angular/hello_angular", "#{Webpacker.config.source_path}/hello_angular"
|
20
8
|
|
21
|
-
say "Copying tsconfig.json to the Rails root directory for typescript"
|
22
|
-
copy_file "#{__dir__}/examples/angular/tsconfig.json", "tsconfig.json"
|
23
|
-
|
24
9
|
say "Installing all angular dependencies"
|
25
|
-
run "yarn add
|
10
|
+
run "yarn add core-js zone.js rxjs @angular/core @angular/common @angular/compiler @angular/platform-browser @angular/platform-browser-dynamic"
|
26
11
|
|
27
|
-
say "Webpacker now supports angular
|
12
|
+
say "Webpacker now supports angular 🎉", :green
|
data/lib/install/coffee.rb
CHANGED
@@ -12,6 +12,9 @@ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
12
12
|
"environment.loaders.append('coffee', coffee)\n",
|
13
13
|
before: "module.exports"
|
14
14
|
|
15
|
+
say "Updating webpack paths to include .coffee file extension"
|
16
|
+
insert_into_file Webpacker.config.config_path, " - .coffee\n", after: /extensions:\n/
|
17
|
+
|
15
18
|
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
16
19
|
copy_file "#{__dir__}/examples/coffee/hello_coffee.coffee",
|
17
20
|
"#{Webpacker.config.source_entry_path}/hello_coffee.coffee"
|
data/lib/install/elm.rb
CHANGED
@@ -25,7 +25,7 @@ run "yarn add elm elm-webpack-loader"
|
|
25
25
|
run "yarn add --dev elm-hot-loader"
|
26
26
|
run "yarn run elm package install -- --yes"
|
27
27
|
|
28
|
-
say "Updating webpack paths to include
|
28
|
+
say "Updating webpack paths to include .elm file extension"
|
29
29
|
insert_into_file Webpacker.config.config_path, " - .elm\n", after: /extensions:\n/
|
30
30
|
|
31
31
|
say "Updating Elm source location"
|
data/lib/install/erb.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "webpacker/configuration"
|
2
2
|
|
3
|
-
say "Copying
|
3
|
+
say "Copying erb loader to config/webpack/loaders"
|
4
4
|
copy_file "#{__dir__}/loaders/erb.js", Rails.root.join("config/webpack/loaders/erb.js").to_s
|
5
5
|
|
6
6
|
say "Adding erb loader to config/webpack/environment.js"
|
@@ -12,6 +12,9 @@ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
|
12
12
|
"environment.loaders.append('erb', erb)\n",
|
13
13
|
before: "module.exports"
|
14
14
|
|
15
|
+
say "Updating webpack paths to include .erb file extension"
|
16
|
+
insert_into_file Webpacker.config.config_path, " - .erb\n", after: /extensions:\n/
|
17
|
+
|
15
18
|
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
16
19
|
copy_file "#{__dir__}/examples/erb/hello_erb.js.erb",
|
17
20
|
"#{Webpacker.config.source_entry_path}/hello_erb.js.erb"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"declaration": false,
|
4
|
+
"emitDecoratorMetadata": true,
|
5
|
+
"experimentalDecorators": true,
|
6
|
+
"lib": ["es6", "dom"],
|
7
|
+
"module": "es6",
|
8
|
+
"moduleResolution": "node",
|
9
|
+
"sourceMap": true,
|
10
|
+
"target": "es5",
|
11
|
+
"jsx": "react"
|
12
|
+
},
|
13
|
+
"exclude": [
|
14
|
+
"**/*.spec.ts",
|
15
|
+
"node_modules",
|
16
|
+
"vendor",
|
17
|
+
"public"
|
18
|
+
],
|
19
|
+
"compileOnSave": false
|
20
|
+
}
|
File without changes
|
@@ -9,10 +9,11 @@ import Vue from 'vue'
|
|
9
9
|
import App from '../app.vue'
|
10
10
|
|
11
11
|
document.addEventListener('DOMContentLoaded', () => {
|
12
|
-
document.body.appendChild(document.createElement('hello'))
|
12
|
+
const el = document.body.appendChild(document.createElement('hello'))
|
13
13
|
const app = new Vue({
|
14
|
+
el,
|
14
15
|
render: h => h(App)
|
15
|
-
})
|
16
|
+
})
|
16
17
|
|
17
18
|
console.log(app)
|
18
19
|
})
|
data/lib/install/loaders/elm.js
CHANGED
@@ -5,7 +5,7 @@ const elmSource = resolve(process.cwd())
|
|
5
5
|
const elmMake = `${elmSource}/node_modules/.bin/elm-make`
|
6
6
|
|
7
7
|
const elmDefaultOptions = { cwd: elmSource, pathToMake: elmMake }
|
8
|
-
const developmentOptions = Object.assign(elmDefaultOptions, {
|
8
|
+
const developmentOptions = Object.assign({}, elmDefaultOptions, {
|
9
9
|
verbose: true,
|
10
10
|
warn: true,
|
11
11
|
debug: true
|
data/lib/install/react.rb
CHANGED
@@ -22,6 +22,9 @@ end
|
|
22
22
|
say "Copying react example entry file to #{Webpacker.config.source_entry_path}"
|
23
23
|
copy_file "#{__dir__}/examples/react/hello_react.jsx", "#{Webpacker.config.source_entry_path}/hello_react.jsx"
|
24
24
|
|
25
|
+
say "Updating webpack paths to include .jsx file extension"
|
26
|
+
insert_into_file Webpacker.config.config_path, " - .jsx\n", after: /extensions:\n/
|
27
|
+
|
25
28
|
say "Installing all react dependencies"
|
26
29
|
run "yarn add react react-dom babel-preset-react prop-types"
|
27
30
|
|
data/lib/install/template.rb
CHANGED
@@ -17,25 +17,24 @@ say "Installing binstubs"
|
|
17
17
|
run "bundle binstubs webpacker"
|
18
18
|
|
19
19
|
say "Adding configurations"
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
environment <<CONFIG, env: :production
|
25
|
-
# Verifies that versions and hashed value of the package contents in the project's package.json
|
26
|
-
config.webpacker.check_yarn_integrity = false
|
27
|
-
CONFIG
|
20
|
+
|
21
|
+
# Verifies that versions and hashed value of the package contents in the project's package.json
|
22
|
+
inject_into_file "config/environments/development.rb", " config.webpacker.check_yarn_integrity = true", after: "Rails.application.configure do\n", verbose: false
|
23
|
+
inject_into_file "config/environments/production.rb", " config.webpacker.check_yarn_integrity = false", after: "Rails.application.configure do\n", verbose: false
|
28
24
|
|
29
25
|
if File.exists?(".gitignore")
|
30
26
|
append_to_file ".gitignore", <<-EOS
|
31
27
|
/public/packs
|
32
28
|
/public/packs-test
|
33
29
|
/node_modules
|
30
|
+
yarn-debug.log*
|
31
|
+
yarn-error.log*
|
32
|
+
.yarn-integrity
|
34
33
|
EOS
|
35
34
|
end
|
36
35
|
|
37
36
|
say "Installing all JavaScript dependencies"
|
38
|
-
run "yarn add @rails/webpacker
|
37
|
+
run "yarn add @rails/webpacker"
|
39
38
|
|
40
39
|
say "Installing dev server for live reloading"
|
41
40
|
run "yarn add --dev webpack-dev-server"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "webpacker/configuration"
|
2
|
+
|
3
|
+
additional_packages = ""
|
4
|
+
example_source = "typescript"
|
5
|
+
|
6
|
+
# Additional configuration is required for React projects
|
7
|
+
package_json = Rails.root.join("package.json")
|
8
|
+
if File.exist?(package_json)
|
9
|
+
package = JSON.parse(File.read(package_json))
|
10
|
+
package["dependencies"] ||= {}
|
11
|
+
|
12
|
+
if package["dependencies"].keys.include?("react")
|
13
|
+
additional_packages = "@types/react @types/react-dom"
|
14
|
+
example_source = "react"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
say "Copying typescript loader to config/webpack/loaders"
|
19
|
+
copy_file "#{__dir__}/loaders/typescript.js", Rails.root.join("config/webpack/loaders/typescript.js").to_s
|
20
|
+
|
21
|
+
say "Adding typescript loader to config/webpack/environment.js"
|
22
|
+
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
23
|
+
"const typescript = require('./loaders/typescript')\n",
|
24
|
+
after: "require('@rails/webpacker')\n"
|
25
|
+
|
26
|
+
insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
|
27
|
+
"environment.loaders.append('typescript', typescript)\n",
|
28
|
+
before: "module.exports"
|
29
|
+
|
30
|
+
say "Copying tsconfig.json to the Rails root directory for typescript"
|
31
|
+
copy_file "#{__dir__}/examples/#{example_source}/tsconfig.json", "tsconfig.json"
|
32
|
+
|
33
|
+
say "Updating webpack paths to include .ts file extension"
|
34
|
+
insert_into_file Webpacker.config.config_path, " - .ts\n", after: /extensions:\n/
|
35
|
+
|
36
|
+
say "Updating webpack paths to include .tsx file extension"
|
37
|
+
insert_into_file Webpacker.config.config_path, " - .tsx\n", after: /extensions:\n/
|
38
|
+
|
39
|
+
say "Copying the example entry file to #{Webpacker.config.source_entry_path}"
|
40
|
+
copy_file "#{__dir__}/examples/typescript/hello_typescript.ts",
|
41
|
+
"#{Webpacker.config.source_entry_path}/hello_typescript.ts"
|
42
|
+
|
43
|
+
say "Installing all typescript dependencies"
|
44
|
+
run "yarn add typescript ts-loader #{additional_packages}"
|
45
|
+
|
46
|
+
say "Webpacker now supports typescript 🎉", :green
|