webpacker 3.3.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8948ef5358c7aac19d89b4260b7dfee306f8a32e7c42b56d3006ad235449d0cf
4
- data.tar.gz: 94bc168c4e24f6f80edfad97c37e50cbd591c4375b155572e1942448a65bf0af
3
+ metadata.gz: 5470791c43b6592ccb7695fea1838c1f09cf8df2072da5be33c26c1f5e3d2212
4
+ data.tar.gz: 4c422b0d744013934cb67bd79995bf408a10143dcdedf93d934dbf99854a8706
5
5
  SHA512:
6
- metadata.gz: a0caa8e595e462e7039f3e8a41315408abc0bc8569e0604333bcbf61ad44c75fb3a1273b2e87d4fc0bba15fc423709aba705d5837c0dab06ff4a79a0931c8aee
7
- data.tar.gz: 31f7ddf9709b74c32bec863a98bc855c245e8aeee204813d7acee196be3883117244dcd02b99125e969b23f687b7c3d28523d86de3997f5a8a2e6d647deb9bcf
6
+ metadata.gz: 785e7b6fa02e9e0459956c634a8cb59f59baae743a6fb3a43c8831406265f8dc6f2f56dedd51076afa1448ab239c8e22dfc81cf8d4cb06bf80f1092d7a480867
7
+ data.tar.gz: 8117b275c4135c4dbe64ab40123bb9b5855b8303ab1c64036ca3f71b26eac729437c43574b52682300710bf47cd512ea792de005cabcfbcbbfc511ef20e66626
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ node_modules
7
7
  yarn-debug.log*
8
8
  yarn-error.log*
9
9
  .yarn-integrity
10
+ /log
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
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.4.0] - 2018-03-23
4
+
5
+ ## Added
6
+ - Support for custom Rails environments [#1359](https://github.com/rails/webpacker/pull/1359)
7
+
8
+ *This could break the compilation if you set NODE_ENV to custom environment. Now, NODE_ENV only understands production or development mode*
9
+
10
+
3
11
  ## [3.3.1] - 2018-03-12
4
12
 
5
13
  ## Fixed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webpacker (3.3.1)
4
+ webpacker (3.4.0)
5
5
  activesupport (>= 4.2)
6
6
  rack-proxy (>= 0.6.1)
7
7
  railties (>= 4.2)
data/README.md CHANGED
@@ -22,7 +22,8 @@ in which case you may not even need the asset pipeline. This is mostly relevant
22
22
  - [Installation](#installation)
23
23
  - [Usage](#usage)
24
24
  - [Development](#development)
25
- - [webpack configuration](#webpack-configuration)
25
+ - [Webpack Configuration](#webpack-configuration)
26
+ - [Custom Rails environments](#custom-rails-environments)
26
27
  - [Upgrading](#upgrading)
27
28
  - [Yarn Integrity](#yarn-integrity)
28
29
  - [Integrations](#integrations)
@@ -190,11 +191,61 @@ WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpack-dev-server
190
191
 
191
192
  **Note:** Don't forget to prefix `ruby` when running these binstubs on Windows
192
193
 
193
- ### webpack configuration
194
+ ### Webpack Configuration
194
195
 
195
196
  See [docs/webpack](docs/webpack.md) for modifying webpack configuration and loaders.
196
197
 
197
198
 
199
+ ### Custom Rails environments
200
+
201
+ 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.
202
+
203
+ You can choose to define additional environment configurations in webpacker.yml,
204
+
205
+ ```yml
206
+ staging:
207
+ <<: *default
208
+
209
+ # Production depends on precompilation of packs prior to booting for performance.
210
+ compile: false
211
+
212
+ # Cache manifest.json for performance
213
+ cache_manifest: true
214
+
215
+ # Compile staging packs to a separate directory
216
+ public_output_path: packs-staging
217
+ ```
218
+
219
+ or, Webpacker will use production environment as a fallback environment for loading configurations. Please note, `NODE_ENV` can either be set to `production` or `development`.
220
+ This means you don't need to create additional environment files inside `config/webpacker/*` and instead use webpacker.yml to load different configurations using `RAILS_ENV`.
221
+
222
+ For example, the below command will compile assets in production mode but will use staging configurations from `config/webpacker.yml` if available or use fallback production environment configuration:
223
+
224
+ ```bash
225
+ RAILS_ENV=staging bundle exec rails assets:precompile
226
+ ```
227
+
228
+ And, this will compile in development mode and load configuration for cucumber environment
229
+ if defined in webpacker.yml or fallback to production configuration
230
+
231
+ ```bash
232
+ RAILS_ENV=cucumber NODE_ENV=development bundle exec rails assets:precompile
233
+ ```
234
+
235
+ Please note, binstubs compiles in development mode however rake tasks
236
+ compiles in production mode.
237
+
238
+ ```bash
239
+ # Compiles in development mode unless NODE_ENV is specified
240
+ ./bin/webpack
241
+ ./bin/webpack-dev-server
242
+
243
+ # compiles in production mode by default unless NODE_ENV is specified
244
+ bundle exec rails assets:precompile
245
+ bundle exec rails webpacker:compile
246
+ ```
247
+
248
+
198
249
  ### Upgrading
199
250
 
200
251
  You can run following commands to upgrade Webpacker to the latest stable version. This process involves upgrading the gem and related npm modules:
@@ -202,7 +253,7 @@ You can run following commands to upgrade Webpacker to the latest stable version
202
253
  ```bash
203
254
  bundle update webpacker
204
255
  yarn upgrade @rails/webpacker --latest
205
- yarn upgrade webpack-dev-server --latest
256
+ yarn add webpack-dev-server@^2.11.1
206
257
  ```
207
258
 
208
259
  ### Yarn Integrity
data/docs/testing.md CHANGED
@@ -126,3 +126,12 @@ class HomesTest < ApplicationSystemTestCase
126
126
  end
127
127
  end
128
128
  ```
129
+
130
+ ## Capybara setup for Rails
131
+ Make sure you configure Rails to serve static files from the public directory in the test environment.
132
+
133
+ ```rb
134
+ # config/environments/test.rb
135
+ # Configure public file server for tests with Cache-Control for performance.
136
+ config.public_file_server.enabled = true
137
+ ```
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
4
- ENV["NODE_ENV"] ||= ENV["RAILS_ENV"]
4
+ ENV["NODE_ENV"] ||= ENV["NODE_ENV"] || "development"
5
5
 
6
6
  require "pathname"
7
7
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
4
- ENV["NODE_ENV"] ||= ENV["RAILS_ENV"]
4
+ ENV["NODE_ENV"] ||= ENV["NODE_ENV"] || "development"
5
5
 
6
6
  require "pathname"
7
7
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
@@ -1,3 +1,5 @@
1
+ process.env.NODE_ENV = process.env.NODE_ENV || 'development'
2
+
1
3
  const environment = require('./environment')
2
4
 
3
5
  module.exports = environment.toWebpackConfig()
@@ -1,3 +1,5 @@
1
+ process.env.NODE_ENV = process.env.NODE_ENV || 'production'
2
+
1
3
  const environment = require('./environment')
2
4
 
3
5
  module.exports = environment.toWebpackConfig()
@@ -1,3 +1,5 @@
1
+ process.env.NODE_ENV = process.env.NODE_ENV || 'development'
2
+
1
3
  const environment = require('./environment')
2
4
 
3
5
  module.exports = environment.toWebpackConfig()
@@ -1,3 +1,5 @@
1
+ ENV["NODE_ENV"] ||= "production"
2
+
1
3
  $stdout.sync = true
2
4
 
3
5
  def ensure_log_goes_to_stdout
@@ -78,8 +78,7 @@ class Webpacker::Compiler
78
78
  end
79
79
 
80
80
  def webpack_env
81
- env.merge("NODE_ENV" => @webpacker.env,
82
- "WEBPACKER_ASSET_HOST" => ActionController::Base.helpers.compute_asset_host,
81
+ env.merge("WEBPACKER_ASSET_HOST" => ActionController::Base.helpers.compute_asset_host,
83
82
  "WEBPACKER_RELATIVE_URL_ROOT" => ActionController::Base.relative_url_root)
84
83
  end
85
84
  end
@@ -14,14 +14,14 @@ module Webpacker
14
14
  private
15
15
  def load_config
16
16
  @config_file = File.join(@app_path, "config/webpacker.yml")
17
- dev_server = YAML.load_file(@config_file)[ENV["NODE_ENV"]]["dev_server"]
17
+ dev_server = YAML.load_file(@config_file)[ENV["RAILS_ENV"]]["dev_server"]
18
18
 
19
19
  @hostname = dev_server["host"]
20
20
  @port = dev_server["port"]
21
21
  @pretty = dev_server.fetch("pretty", true)
22
22
 
23
23
  rescue Errno::ENOENT, NoMethodError
24
- $stdout.puts "webpack dev_server configuration not found in #{@config_file}."
24
+ $stdout.puts "webpack dev_server configuration not found in #{@config_file}[#{ENV["RAILS_ENV"]}]."
25
25
  $stdout.puts "Please run bundle exec rails webpacker:install to install Webpacker"
26
26
  exit!
27
27
  end
data/lib/webpacker/env.rb CHANGED
@@ -18,11 +18,11 @@ class Webpacker::Env
18
18
 
19
19
  private
20
20
  def current
21
- (ENV["NODE_ENV"] || Rails.env).presence_in(available_environments)
21
+ Rails.env.presence_in(available_environments)
22
22
  end
23
23
 
24
24
  def fallback_env_warning
25
- logger.info "NODE_ENV=#{ENV["NODE_ENV"]} and RAILS_ENV=#{Rails.env} environment is not defined in config/webpacker.yml, falling back to #{DEFAULT} environment"
25
+ logger.info "RAILS_ENV=#{Rails.env} environment is not defined in config/webpacker.yml, falling back to #{DEFAULT} environment"
26
26
  end
27
27
 
28
28
  def available_environments
@@ -22,7 +22,7 @@ class Webpacker::Engine < ::Rails::Engine
22
22
  #
23
23
  # to turn on:
24
24
  # - edit config/environments/production.rb
25
- # - add `config.webpacker.check_yarn_integrity = false`
25
+ # - add `config.webpacker.check_yarn_integrity = true`
26
26
  initializer "webpacker.yarn_check" do |app|
27
27
  if File.exist?("yarn.lock") && app.config.webpacker.check_yarn_integrity
28
28
  output = `yarn check --integrity 2>&1`
@@ -1,4 +1,4 @@
1
1
  module Webpacker
2
2
  # Change the version in package.json too, please!
3
- VERSION = "3.3.1".freeze
3
+ VERSION = "3.4.0".freeze
4
4
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rails/webpacker",
3
- "version": "3.3.1",
3
+ "version": "3.4.0",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "main": "package/index.js",
6
6
  "files": [
@@ -8,8 +8,9 @@ describe('DevServer', () => {
8
8
  beforeEach(() => jest.resetModules())
9
9
  afterAll(chdirCwd)
10
10
 
11
- test('with NODE_ENV set to development', () => {
11
+ test('with NODE_ENV and RAILS_ENV set to development', () => {
12
12
  process.env.NODE_ENV = 'development'
13
+ process.env.RAILS_ENV = 'development'
13
14
  process.env.WEBPACKER_DEV_SERVER_HOST = '0.0.0.0'
14
15
  process.env.WEBPACKER_DEV_SERVER_PORT = 5000
15
16
 
@@ -19,7 +20,8 @@ describe('DevServer', () => {
19
20
  expect(devServer.port).toEqual('5000')
20
21
  })
21
22
 
22
- test('with NODE_ENV set to production', () => {
23
+ test('with NODE_ENV and RAILS_ENV set to production', () => {
24
+ process.env.RAILS_ENV = 'production'
23
25
  process.env.NODE_ENV = 'production'
24
26
  expect(require('../dev_server')).toEqual({})
25
27
  })
@@ -0,0 +1,30 @@
1
+ /* test expect, describe, afterAll, beforeEach */
2
+
3
+ const { resolve } = require('path')
4
+ const { chdirTestApp, chdirCwd } = require('../utils/helpers')
5
+
6
+ chdirTestApp()
7
+
8
+ describe('Development environment', () => {
9
+ afterAll(chdirCwd)
10
+
11
+ describe('toWebpackConfig', () => {
12
+ beforeEach(() => jest.resetModules())
13
+
14
+ test('should use development config and environment', () => {
15
+ process.env.RAILS_ENV = 'development'
16
+ process.env.NODE_ENV = 'development'
17
+ const { environment } = require('../index')
18
+
19
+ const config = environment.toWebpackConfig()
20
+ expect(config.output.path).toEqual(resolve('public', 'packs'))
21
+ expect(config.output.publicPath).toEqual('/packs/')
22
+ expect(config).toMatchObject({
23
+ devServer: {
24
+ host: 'localhost',
25
+ port: 3035
26
+ }
27
+ })
28
+ })
29
+ })
30
+ })
@@ -8,21 +8,39 @@ describe('Env', () => {
8
8
  beforeEach(() => jest.resetModules())
9
9
  afterAll(chdirCwd)
10
10
 
11
- test('with NODE_ENV set to development', () => {
11
+ test('with NODE_ENV and RAILS_ENV set to development', () => {
12
+ process.env.RAILS_ENV = 'development'
12
13
  process.env.NODE_ENV = 'development'
13
- expect(require('../env')).toEqual('development')
14
+ expect(require('../env')).toEqual({
15
+ railsEnv: 'development',
16
+ nodeEnv: 'development'
17
+ })
14
18
  })
15
19
 
16
20
  test('with undefined NODE_ENV and RAILS_ENV set to development', () => {
17
- delete process.env.NODE_ENV
18
21
  process.env.RAILS_ENV = 'development'
19
- expect(require('../env')).toEqual('development')
22
+ delete process.env.NODE_ENV
23
+ expect(require('../env')).toEqual({
24
+ railsEnv: 'development',
25
+ nodeEnv: 'production'
26
+ })
20
27
  })
21
28
 
22
- test('with a non-standard environment', () => {
23
- process.env.NODE_ENV = 'foo'
24
- process.env.RAILS_ENV = 'foo'
25
- expect(require('../env')).toEqual('production')
29
+ test('with undefined NODE_ENV and RAILS_ENV', () => {
30
+ delete process.env.NODE_ENV
26
31
  delete process.env.RAILS_ENV
32
+ expect(require('../env')).toEqual({
33
+ railsEnv: 'production',
34
+ nodeEnv: 'production'
35
+ })
36
+ })
37
+
38
+ test('with a non-standard environment', () => {
39
+ process.env.RAILS_ENV = 'staging'
40
+ process.env.NODE_ENV = 'staging'
41
+ expect(require('../env')).toEqual({
42
+ railsEnv: 'staging',
43
+ nodeEnv: 'production'
44
+ })
27
45
  })
28
46
  })
@@ -0,0 +1,27 @@
1
+ /* test expect, describe, afterAll, beforeEach */
2
+
3
+ const { resolve } = require('path')
4
+ const { chdirTestApp, chdirCwd } = require('../utils/helpers')
5
+
6
+ chdirTestApp()
7
+
8
+ describe('Production environment', () => {
9
+ afterAll(chdirCwd)
10
+
11
+ describe('toWebpackConfig', () => {
12
+ beforeEach(() => jest.resetModules())
13
+
14
+ test('should use production config and environment', () => {
15
+ process.env.RAILS_ENV = 'production'
16
+ const { environment } = require('../index')
17
+
18
+ const config = environment.toWebpackConfig()
19
+ expect(config.output.path).toEqual(resolve('public', 'packs'))
20
+ expect(config.output.publicPath).toEqual('/packs/')
21
+ expect(config).toMatchObject({
22
+ devtool: 'nosources-source-map',
23
+ stats: 'normal'
24
+ })
25
+ })
26
+ })
27
+ })
@@ -0,0 +1,27 @@
1
+ /* test expect, describe, afterAll, beforeEach */
2
+
3
+ const { resolve } = require('path')
4
+ const { chdirTestApp, chdirCwd } = require('../utils/helpers')
5
+
6
+ chdirTestApp()
7
+
8
+ describe('Custom environment', () => {
9
+ afterAll(chdirCwd)
10
+
11
+ describe('toWebpackConfig', () => {
12
+ beforeEach(() => jest.resetModules())
13
+
14
+ test('should use staging config and production environment', () => {
15
+ process.env.RAILS_ENV = 'staging'
16
+ const { environment } = require('../index')
17
+
18
+ const config = environment.toWebpackConfig()
19
+ expect(config.output.path).toEqual(resolve('public', 'packs-staging'))
20
+ expect(config.output.publicPath).toEqual('/packs-staging/')
21
+ expect(config).toMatchObject({
22
+ devtool: 'nosources-source-map',
23
+ stats: 'normal'
24
+ })
25
+ })
26
+ })
27
+ })
@@ -0,0 +1,23 @@
1
+ /* test expect, describe, afterAll, beforeEach */
2
+
3
+ const { resolve } = require('path')
4
+ const { chdirTestApp, chdirCwd } = require('../utils/helpers')
5
+
6
+ chdirTestApp()
7
+
8
+ describe('Test environment', () => {
9
+ afterAll(chdirCwd)
10
+
11
+ describe('toWebpackConfig', () => {
12
+ beforeEach(() => jest.resetModules())
13
+
14
+ test('should use test config and production environment', () => {
15
+ process.env.RAILS_ENV = 'test'
16
+ const { environment } = require('../index')
17
+
18
+ const config = environment.toWebpackConfig()
19
+ expect(config.output.path).toEqual(resolve('public', 'packs-test'))
20
+ expect(config.output.publicPath).toEqual('/packs-test/')
21
+ })
22
+ })
23
+ })
data/package/config.js CHANGED
@@ -3,25 +3,23 @@ const { safeLoad } = require('js-yaml')
3
3
  const { readFileSync } = require('fs')
4
4
  const deepMerge = require('./utils/deep_merge')
5
5
  const { isArray } = require('./utils/helpers')
6
- const env = require('./env')
6
+ const { railsEnv } = require('./env')
7
7
 
8
8
  const defaultConfigPath = require.resolve('../lib/install/config/webpacker.yml')
9
9
  const configPath = resolve('config', 'webpacker.yml')
10
10
 
11
- const getConfig = () => {
12
- const defaults = safeLoad(readFileSync(defaultConfigPath), 'utf8')[env]
13
- const app = safeLoad(readFileSync(configPath), 'utf8')[env]
14
-
15
- if (isArray(app.extensions) && app.extensions.length) {
16
- delete defaults.extensions
17
- }
11
+ const getDefaultConfig = () => {
12
+ const defaultConfig = safeLoad(readFileSync(defaultConfigPath), 'utf8')
13
+ return defaultConfig[railsEnv] || defaultConfig.production
14
+ }
18
15
 
19
- const config = deepMerge(defaults, app)
16
+ const defaults = getDefaultConfig()
17
+ const app = safeLoad(readFileSync(configPath), 'utf8')[railsEnv]
20
18
 
21
- config.outputPath = resolve('public', config.public_output_path)
22
- config.publicPath = `/${config.public_output_path}/`.replace(/([^:]\/)\/+/g, '$1')
19
+ if (isArray(app.extensions) && app.extensions.length) delete defaults.extensions
23
20
 
24
- return config
25
- }
21
+ const config = deepMerge(defaults, app)
22
+ config.outputPath = resolve('public', config.public_output_path)
23
+ config.publicPath = `/${config.public_output_path}/`.replace(/([^:]\/)\/+/g, '$1')
26
24
 
27
- module.exports = getConfig()
25
+ module.exports = config
@@ -1,4 +1,4 @@
1
- const { isBoolean, isEmpty } = require('./utils/helpers')
1
+ const { isBoolean } = require('./utils/helpers')
2
2
  const config = require('./config')
3
3
 
4
4
  const fetch = (key) => {
@@ -6,18 +6,13 @@ const fetch = (key) => {
6
6
  return isBoolean(value) ? JSON.parse(value) : value
7
7
  }
8
8
 
9
- const devServer = () => {
10
- const devServerConfig = config.dev_server
9
+ const devServerConfig = config.dev_server
11
10
 
12
- if (devServerConfig) {
13
- Object.keys(devServerConfig).forEach((key) => {
14
- const envValue = fetch(`WEBPACKER_DEV_SERVER_${key.toUpperCase().replace(/_/g, '')}`)
15
- if (isEmpty(envValue)) return devServerConfig[key]
16
- devServerConfig[key] = envValue
17
- })
18
- }
19
-
20
- return devServerConfig || {}
11
+ if (devServerConfig) {
12
+ Object.keys(devServerConfig).forEach((key) => {
13
+ const envValue = fetch(`WEBPACKER_DEV_SERVER_${key.toUpperCase().replace(/_/g, '')}`)
14
+ if (envValue) devServerConfig[key] = envValue
15
+ })
21
16
  }
22
17
 
23
- module.exports = devServer()
18
+ module.exports = devServerConfig || {}
data/package/env.js CHANGED
@@ -2,22 +2,18 @@ const { resolve } = require('path')
2
2
  const { safeLoad } = require('js-yaml')
3
3
  const { readFileSync } = require('fs')
4
4
 
5
+ const NODE_ENVIRONMENTS = ['development', 'production']
6
+ const DEFAULT = 'production'
5
7
  const configPath = resolve('config', 'webpacker.yml')
6
- const DEFAULT_ENV = 'production'
7
8
 
8
- const env = () => {
9
- const nodeEnv = process.env.NODE_ENV
10
- const railsEnv = process.env.RAILS_ENV
11
- const config = safeLoad(readFileSync(configPath), 'utf8')
12
- const availableEnvironments = Object.keys(config).join('|')
13
- const regex = new RegExp(availableEnvironments, 'g')
9
+ const railsEnv = process.env.RAILS_ENV
10
+ const nodeEnv = process.env.NODE_ENV
14
11
 
15
- if (nodeEnv && nodeEnv.match(regex)) return nodeEnv
16
- if (railsEnv && railsEnv.match(regex)) return railsEnv
12
+ const config = safeLoad(readFileSync(configPath), 'utf8')
13
+ const availableEnvironments = Object.keys(config).join('|')
14
+ const regex = new RegExp(availableEnvironments, 'g')
17
15
 
18
- /* eslint no-console: 0 */
19
- console.warn(`NODE_ENV=${nodeEnv} and RAILS_ENV=${railsEnv} environment is not defined in config/webpacker.yml, falling back to ${DEFAULT_ENV}`)
20
- return DEFAULT_ENV
16
+ module.exports = {
17
+ railsEnv: railsEnv && railsEnv.match(regex) ? railsEnv : DEFAULT,
18
+ nodeEnv: nodeEnv && NODE_ENVIRONMENTS.includes(nodeEnv) ? nodeEnv : DEFAULT
21
19
  }
22
-
23
- module.exports = env()
@@ -31,8 +31,6 @@ describe('Environment', () => {
31
31
  const config = environment.toWebpackConfig()
32
32
  expect(config.output.filename).toEqual('[name]-[chunkhash].js')
33
33
  expect(config.output.chunkFilename).toEqual('[name]-[chunkhash].chunk.js')
34
- expect(config.output.path).toEqual(resolve('public', 'packs-test'))
35
- expect(config.output.publicPath).toEqual('/packs-test/')
36
34
  })
37
35
 
38
36
  test('should return default loader rules for each file in config/loaders', () => {
data/package/index.js CHANGED
@@ -5,12 +5,12 @@ const { resolve } = require('path')
5
5
  const { existsSync } = require('fs')
6
6
  const Environment = require('./environments/base')
7
7
  const loaders = require('./rules')
8
- const env = require('./env')
9
8
  const config = require('./config')
10
9
  const devServer = require('./dev_server')
10
+ const { nodeEnv } = require('./env')
11
11
 
12
12
  const createEnvironment = () => {
13
- const path = resolve(__dirname, 'environments', `${env}.js`)
13
+ const path = resolve(__dirname, 'environments', `${nodeEnv}.js`)
14
14
  const constructor = existsSync(path) ? require(path) : Environment
15
15
  return new constructor()
16
16
  }
@@ -1,9 +1,10 @@
1
1
  const ExtractTextPlugin = require('extract-text-webpack-plugin')
2
2
  const path = require('path')
3
3
  const devServer = require('../dev_server')
4
+ const { nodeEnv } = require('../env')
4
5
 
5
6
  const postcssConfigPath = path.resolve(process.cwd(), '.postcssrc.yml')
6
- const isProduction = process.env.NODE_ENV === 'production'
7
+ const isProduction = nodeEnv === 'production'
7
8
  const inDevServer = process.argv.find(v => v.includes('webpack-dev-server'))
8
9
  const isHMR = inDevServer && (devServer && devServer.hmr)
9
10
  const extractCSS = !isHMR || isProduction
@@ -41,30 +41,26 @@ class ConfigurationTest < Webpacker::Test
41
41
  end
42
42
 
43
43
  def test_cache_manifest?
44
- with_node_env("development") do
45
- refute reloaded_config.cache_manifest?
46
- end
44
+ assert Webpacker.config.cache_manifest?
47
45
 
48
- with_node_env("test") do
49
- refute reloaded_config.cache_manifest?
46
+ with_rails_env("development") do
47
+ refute Webpacker.config.cache_manifest?
50
48
  end
51
49
 
52
- with_node_env("production") do
53
- assert reloaded_config.cache_manifest?
50
+ with_rails_env("test") do
51
+ refute Webpacker.config.cache_manifest?
54
52
  end
55
53
  end
56
54
 
57
55
  def test_compile?
58
- with_node_env("development") do
59
- assert reloaded_config.compile?
60
- end
56
+ refute Webpacker.config.compile?
61
57
 
62
- with_node_env("test") do
63
- assert reloaded_config.compile?
58
+ with_rails_env("development") do
59
+ assert Webpacker.config.compile?
64
60
  end
65
61
 
66
- with_node_env("production") do
67
- refute reloaded_config.compile?
62
+ with_rails_env("test") do
63
+ assert Webpacker.config.compile?
68
64
  end
69
65
  end
70
66
  end
@@ -2,29 +2,23 @@ require "test_helper"
2
2
 
3
3
  class DevServerTest < Webpacker::Test
4
4
  def test_running?
5
- with_node_env("production") do
6
- reloaded_config
7
- refute Webpacker.dev_server.running?
8
- end
5
+ refute Webpacker.dev_server.running?
9
6
  end
10
7
 
11
8
  def test_host
12
- with_node_env("development") do
13
- reloaded_config
9
+ with_rails_env("development") do
14
10
  assert_equal Webpacker.dev_server.host, "localhost"
15
11
  end
16
12
  end
17
13
 
18
14
  def test_port
19
- with_node_env("development") do
20
- reloaded_config
15
+ with_rails_env("development") do
21
16
  assert_equal Webpacker.dev_server.port, 3035
22
17
  end
23
18
  end
24
19
 
25
20
  def test_https?
26
- with_node_env("development") do
27
- reloaded_config
21
+ with_rails_env("development") do
28
22
  assert_equal Webpacker.dev_server.https?, false
29
23
  end
30
24
  end
data/test/env_test.rb CHANGED
@@ -2,14 +2,18 @@ require "test_helper"
2
2
 
3
3
  class EnvTest < Webpacker::Test
4
4
  def test_current
5
- reloaded_config
6
- assert_equal Webpacker.env, "production"
5
+ assert_equal Webpacker.env, Rails.env
7
6
  end
8
7
 
9
- def test_custom
10
- with_node_env("default") do
11
- reloaded_config
12
- assert_equal Webpacker.env, "default"
8
+ def test_custom_without_config
9
+ with_rails_env("foo") do
10
+ assert_equal Webpacker.env, "production"
11
+ end
12
+ end
13
+
14
+ def test_custom_with_config
15
+ with_rails_env("staging") do
16
+ assert_equal Webpacker.env, "staging"
13
17
  end
14
18
  end
15
19
 
@@ -61,3 +61,15 @@ production:
61
61
 
62
62
  # Cache manifest.json for performance
63
63
  cache_manifest: true
64
+
65
+ staging:
66
+ <<: *default
67
+
68
+ # Production depends on precompilation of packs prior to booting for performance.
69
+ compile: false
70
+
71
+ # Cache manifest.json for performance
72
+ cache_manifest: true
73
+
74
+ # Compile staging packs to a separate directory
75
+ public_output_path: packs-staging
data/test/test_helper.rb CHANGED
@@ -6,7 +6,7 @@ require "byebug"
6
6
 
7
7
  require_relative "test_app/config/environment"
8
8
 
9
- ENV["NODE_ENV"] = "production"
9
+ Rails.env = "production"
10
10
 
11
11
  Webpacker.instance = Webpacker::Instance.new \
12
12
  root_path: Pathname.new(File.expand_path("test_app", __dir__)),
@@ -21,11 +21,13 @@ class Webpacker::Test < Minitest::Test
21
21
  Webpacker.config
22
22
  end
23
23
 
24
- def with_node_env(env)
25
- original = ENV["NODE_ENV"]
26
- ENV["NODE_ENV"] = env
24
+ def with_rails_env(env)
25
+ original = Rails.env
26
+ Rails.env = ActiveSupport::StringInquirer.new(env)
27
+ reloaded_config
27
28
  yield
28
29
  ensure
29
- ENV["NODE_ENV"] = original
30
+ Rails.env = ActiveSupport::StringInquirer.new(original)
31
+ reloaded_config
30
32
  end
31
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-03-12 00:00:00.000000000 Z
12
+ date: 2018-03-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -178,8 +178,11 @@ files:
178
178
  - package.json
179
179
  - package/__tests__/config.js
180
180
  - package/__tests__/dev_server.js
181
+ - package/__tests__/development.js
181
182
  - package/__tests__/env.js
182
- - package/__tests__/index.js
183
+ - package/__tests__/production.js
184
+ - package/__tests__/staging.js
185
+ - package/__tests__/test.js
183
186
  - package/config.js
184
187
  - package/config_types/__tests__/config_list.js
185
188
  - package/config_types/__tests__/config_object.js
@@ -1,31 +0,0 @@
1
- /* global test expect, describe */
2
-
3
- const { chdirTestApp, chdirCwd } = require('../utils/helpers')
4
-
5
- chdirTestApp()
6
-
7
- describe('Webpacker', () => {
8
- beforeEach(() => jest.resetModules())
9
- afterAll(chdirCwd)
10
-
11
- test('with NODE_ENV set to development', () => {
12
- process.env.NODE_ENV = 'development'
13
- const { environment } = require('../index')
14
- expect(environment.toWebpackConfig()).toMatchObject({
15
- devServer: {
16
- host: 'localhost',
17
- port: 3035
18
- }
19
- })
20
- })
21
-
22
- test('with a non-standard env', () => {
23
- process.env.NODE_ENV = 'staging'
24
- process.env.RAILS_ENV = 'staging'
25
- const { environment } = require('../index')
26
- expect(environment.toWebpackConfig()).toMatchObject({
27
- devtool: 'nosources-source-map',
28
- stats: 'normal'
29
- })
30
- })
31
- })