webpacker 1.0 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +14 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +124 -0
  5. data/.travis.yml +24 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +6 -6
  8. data/README.md +126 -19
  9. data/lib/install/angular.rb +18 -0
  10. data/lib/install/bin/webpack-dev-server.tt +23 -12
  11. data/lib/install/bin/webpack-watcher.tt +3 -0
  12. data/lib/install/bin/webpack.tt +33 -7
  13. data/lib/install/config/.postcssrc.yml +4 -0
  14. data/lib/install/config/loaders/core/assets.js +12 -0
  15. data/lib/install/config/loaders/core/babel.js +10 -0
  16. data/lib/install/config/loaders/core/coffee.js +4 -0
  17. data/lib/install/config/loaders/core/erb.js +9 -0
  18. data/lib/install/config/loaders/core/sass.js +9 -0
  19. data/lib/install/config/loaders/installers/angular.js +4 -0
  20. data/lib/install/config/loaders/installers/react.js +11 -0
  21. data/lib/install/config/loaders/installers/vue.js +10 -0
  22. data/lib/install/config/webpack/configuration.js +21 -0
  23. data/lib/install/config/webpack/development.js +16 -0
  24. data/lib/install/config/webpack/development.server.js +17 -0
  25. data/lib/install/config/webpack/development.server.yml +4 -0
  26. data/lib/install/config/webpack/paths.yml +19 -0
  27. data/lib/install/config/webpack/production.js +20 -0
  28. data/lib/install/config/webpack/shared.js +51 -0
  29. data/lib/install/{angular → examples/angular}/hello_angular.js +1 -1
  30. data/lib/install/{angular → examples/angular}/hello_angular/app/app.component.ts +0 -0
  31. data/lib/install/{angular → examples/angular}/hello_angular/app/app.module.ts +0 -0
  32. data/lib/install/{angular → examples/angular}/hello_angular/index.ts +0 -0
  33. data/lib/install/{angular → examples/angular}/hello_angular/polyfills.ts +0 -0
  34. data/lib/install/{angular → examples/angular}/tsconfig.json +0 -0
  35. data/lib/install/examples/react/.babelrc +3 -0
  36. data/lib/install/examples/react/hello_react.jsx +25 -0
  37. data/lib/install/examples/vue/app.vue +22 -0
  38. data/lib/install/examples/vue/hello_vue.js +19 -0
  39. data/lib/install/javascript/packs/application.js +1 -0
  40. data/lib/install/react.rb +15 -0
  41. data/lib/install/template.rb +20 -14
  42. data/lib/install/vue.rb +15 -0
  43. data/lib/tasks/installers.rake +21 -0
  44. data/lib/tasks/webpacker.rake +14 -107
  45. data/lib/tasks/webpacker/compile.rake +29 -0
  46. data/lib/tasks/webpacker/install.rake +12 -0
  47. data/lib/tasks/webpacker/verify_install.rake +16 -0
  48. data/lib/tasks/webpacker/yarn_install.rake +6 -0
  49. data/lib/webpacker.rb +1 -1
  50. data/lib/webpacker/configuration.rb +42 -0
  51. data/lib/webpacker/file_loader.rb +24 -0
  52. data/lib/webpacker/helper.rb +32 -3
  53. data/lib/webpacker/manifest.rb +29 -0
  54. data/lib/webpacker/railtie.rb +6 -16
  55. data/lib/webpacker/version.rb +3 -0
  56. data/package.json +28 -0
  57. data/webpacker.gemspec +15 -12
  58. data/yarn.lock +1014 -0
  59. metadata +50 -20
  60. data/lib/install/config/development.js +0 -24
  61. data/lib/install/config/production.js +0 -16
  62. data/lib/install/config/shared.js +0 -70
  63. data/lib/install/react/.babelrc +0 -3
  64. data/lib/install/react/hello_react.js +0 -16
  65. data/lib/webpacker/digests.rb +0 -42
  66. data/lib/webpacker/source.rb +0 -38
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpacker
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: '1.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-23 00:00:00.000000000 Z
11
+ date: 2017-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '4.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '4.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,36 +72,66 @@ executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
+ - ".eslintrc.js"
75
76
  - ".gitignore"
77
+ - ".rubocop.yml"
78
+ - ".travis.yml"
76
79
  - Gemfile
77
80
  - Gemfile.lock
78
81
  - MIT-LICENSE
79
82
  - README.md
80
83
  - Rakefile
81
- - lib/install/angular/hello_angular.js
82
- - lib/install/angular/hello_angular/app/app.component.ts
83
- - lib/install/angular/hello_angular/app/app.module.ts
84
- - lib/install/angular/hello_angular/index.ts
85
- - lib/install/angular/hello_angular/polyfills.ts
86
- - lib/install/angular/tsconfig.json
84
+ - lib/install/angular.rb
87
85
  - lib/install/bin/webpack-dev-server.tt
88
86
  - lib/install/bin/webpack-watcher.tt
89
87
  - lib/install/bin/webpack.tt
90
88
  - lib/install/bin/yarn.tt
91
- - lib/install/config/development.js
92
- - lib/install/config/production.js
93
- - lib/install/config/shared.js
89
+ - lib/install/config/.postcssrc.yml
90
+ - lib/install/config/loaders/core/assets.js
91
+ - lib/install/config/loaders/core/babel.js
92
+ - lib/install/config/loaders/core/coffee.js
93
+ - lib/install/config/loaders/core/erb.js
94
+ - lib/install/config/loaders/core/sass.js
95
+ - lib/install/config/loaders/installers/angular.js
96
+ - lib/install/config/loaders/installers/react.js
97
+ - lib/install/config/loaders/installers/vue.js
98
+ - lib/install/config/webpack/configuration.js
99
+ - lib/install/config/webpack/development.js
100
+ - lib/install/config/webpack/development.server.js
101
+ - lib/install/config/webpack/development.server.yml
102
+ - lib/install/config/webpack/paths.yml
103
+ - lib/install/config/webpack/production.js
104
+ - lib/install/config/webpack/shared.js
105
+ - lib/install/examples/angular/hello_angular.js
106
+ - lib/install/examples/angular/hello_angular/app/app.component.ts
107
+ - lib/install/examples/angular/hello_angular/app/app.module.ts
108
+ - lib/install/examples/angular/hello_angular/index.ts
109
+ - lib/install/examples/angular/hello_angular/polyfills.ts
110
+ - lib/install/examples/angular/tsconfig.json
111
+ - lib/install/examples/react/.babelrc
112
+ - lib/install/examples/react/hello_react.jsx
113
+ - lib/install/examples/vue/app.vue
114
+ - lib/install/examples/vue/hello_vue.js
94
115
  - lib/install/javascript/packs/application.js
95
- - lib/install/react/.babelrc
96
- - lib/install/react/hello_react.js
116
+ - lib/install/react.rb
97
117
  - lib/install/template.rb
118
+ - lib/install/vue.rb
119
+ - lib/tasks/installers.rake
98
120
  - lib/tasks/webpacker.rake
121
+ - lib/tasks/webpacker/compile.rake
122
+ - lib/tasks/webpacker/install.rake
123
+ - lib/tasks/webpacker/verify_install.rake
124
+ - lib/tasks/webpacker/yarn_install.rake
99
125
  - lib/webpacker.rb
100
- - lib/webpacker/digests.rb
126
+ - lib/webpacker/configuration.rb
127
+ - lib/webpacker/file_loader.rb
101
128
  - lib/webpacker/helper.rb
129
+ - lib/webpacker/manifest.rb
102
130
  - lib/webpacker/railtie.rb
103
- - lib/webpacker/source.rb
131
+ - lib/webpacker/version.rb
132
+ - package.json
104
133
  - webpacker.gemspec
134
+ - yarn.lock
105
135
  homepage: https://github.com/rails/webpacker
106
136
  licenses:
107
137
  - MIT
@@ -122,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
152
  version: '0'
123
153
  requirements: []
124
154
  rubyforge_project:
125
- rubygems_version: 2.6.10
155
+ rubygems_version: 2.6.8
126
156
  signing_key:
127
157
  specification_version: 4
128
158
  summary: Use Webpack to manage app-like JavaScript modules in Rails
@@ -1,24 +0,0 @@
1
- // Note: You must restart bin/webpack-watcher for changes to take effect
2
-
3
- var webpack = require('webpack')
4
- var merge = require('webpack-merge')
5
-
6
- var sharedConfig = require('./shared.js')
7
-
8
- module.exports = merge(sharedConfig.config, {
9
- devtool: 'sourcemap',
10
-
11
- stats: {
12
- errorDetails: true
13
- },
14
-
15
- output: {
16
- pathinfo: true
17
- },
18
-
19
- plugins: [
20
- new webpack.LoaderOptionsPlugin({
21
- debug: true
22
- })
23
- ]
24
- })
@@ -1,16 +0,0 @@
1
- // Note: You must restart bin/webpack-watcher for changes to take effect
2
-
3
- var webpack = require('webpack')
4
- var merge = require('webpack-merge')
5
-
6
- var sharedConfig = require('./shared.js')
7
-
8
- module.exports = merge(sharedConfig.config, {
9
- output: { filename: '[name]-[hash].js' },
10
-
11
- plugins: [
12
- new webpack.LoaderOptionsPlugin({
13
- minimize: true
14
- })
15
- ]
16
- })
@@ -1,70 +0,0 @@
1
- // Note: You must restart bin/webpack-watcher for changes to take effect
2
-
3
- var webpack = require('webpack')
4
- var path = require('path')
5
- var process = require('process')
6
- var glob = require('glob')
7
- var extname = require('path-complete-extname')
8
- var distDir = process.env.WEBPACK_DIST_DIR
9
-
10
- if(distDir === undefined) {
11
- distDir = 'packs'
12
- }
13
-
14
- config = {
15
- entry: glob.sync(path.join('app', 'javascript', 'packs', '*.js*')).reduce(
16
- function(map, entry) {
17
- var basename = path.basename(entry, extname(entry))
18
- map[basename] = path.resolve(entry)
19
- return map
20
- }, {}
21
- ),
22
-
23
- output: { filename: '[name].js', path: path.resolve('public', distDir) },
24
-
25
- module: {
26
- rules: [
27
- { test: /\.coffee(.erb)?$/, loader: "coffee-loader" },
28
- {
29
- test: /\.js(.erb)?$/,
30
- exclude: /node_modules/,
31
- loader: 'babel-loader',
32
- options: {
33
- presets: [
34
- [ 'latest', { 'es2015': { 'modules': false } } ]
35
- ]
36
- }
37
- },
38
- {
39
- test: /.erb$/,
40
- enforce: 'pre',
41
- exclude: /node_modules/,
42
- loader: 'rails-erb-loader',
43
- options: {
44
- runner: 'DISABLE_SPRING=1 bin/rails runner'
45
- }
46
- },
47
- ]
48
- },
49
-
50
- plugins: [
51
- new webpack.EnvironmentPlugin(Object.keys(process.env))
52
- ],
53
-
54
- resolve: {
55
- extensions: [ '.js', '.coffee' ],
56
- modules: [
57
- path.resolve('app/javascript'),
58
- path.resolve('node_modules')
59
- ]
60
- },
61
-
62
- resolveLoader: {
63
- modules: [ path.resolve('node_modules') ]
64
- }
65
- }
66
-
67
- module.exports = {
68
- distDir: distDir,
69
- config: config
70
- }
@@ -1,3 +0,0 @@
1
- {
2
- "presets": ["es2015", "react"]
3
- }
@@ -1,16 +0,0 @@
1
- // Run this example by adding <%= javascript_pack_tag 'hello_react' %> to the head of your layout file,
2
- // like app/views/layouts/application.html.erb. All it does is render <div>Hello React</div> at the bottom
3
- // of the page.
4
-
5
- import React from 'react'
6
- import ReactDOM from 'react-dom'
7
-
8
- class Hello extends React.Component {
9
- render() {
10
- return <div>Hello {this.props.name}!</div>
11
- }
12
- }
13
-
14
- document.addEventListener("DOMContentLoaded", e => {
15
- ReactDOM.render(<Hello name="React" />, document.body.appendChild(document.createElement('div')))
16
- })
@@ -1,42 +0,0 @@
1
- # Singleton registry for accessing the digested filenames computed by Webpack in production mode.
2
- # This allows javascript_pack_tag to take a reference to, say, "calendar.js" and turn it into
3
- # "calendar-1016838bab065ae1e314.js". These digested filenames are what enables you to long-term
4
- # cache things in production.
5
- class Webpacker::Digests
6
- class DigestError < StandardError; end
7
-
8
- class_attribute :instance
9
-
10
- class << self
11
- def load(path)
12
- self.instance = new(path)
13
- end
14
-
15
- def lookup(name)
16
- if instance
17
- instance.lookup(name).presence || raise(DigestError.new("Can't find #{name} in #{instance.inspect}"))
18
- else
19
- raise DigestError.new("Webpacker::Digests.load(path) must be called first")
20
- end
21
- end
22
- end
23
-
24
- def initialize(path)
25
- @path = path
26
- @digests = load
27
- end
28
-
29
- def lookup(name)
30
- @digests[name.to_s]
31
- end
32
-
33
- private
34
- def load
35
- if File.exist?(@path)
36
- JSON.parse(File.read(@path))
37
- else
38
- Rails.logger.info "Didn't find any digests file at #{@path}. You must first compile the packs via rails webpacker:compile"
39
- {}
40
- end
41
- end
42
- end
@@ -1,38 +0,0 @@
1
- # Translates a logical reference for a pack source into the final path needed in the HTML.
2
- # This translation takes into account whether digesting is configured to happen, which it
3
- # is by default in the production environment (as set via
4
- # `Rails.configuration.x.webpacker[:digesting] = true`).
5
- class Webpacker::Source
6
- def initialize(name)
7
- @name = name
8
- end
9
-
10
- def path
11
- if config[:dev_server_host].present?
12
- "#{config[:dev_server_host]}/#{filename}"
13
- elsif config[:digesting]
14
- File.join(dist_path, digested_filename)
15
- else
16
- File.join(dist_path, filename)
17
- end
18
- end
19
-
20
- private
21
- attr_accessor :name
22
-
23
- def config
24
- Rails.configuration.x.webpacker
25
- end
26
-
27
- def digested_filename
28
- Webpacker::Digests.lookup(name)
29
- end
30
-
31
- def dist_path
32
- config[:packs_dist_path]
33
- end
34
-
35
- def filename
36
- "#{name}.js"
37
- end
38
- end