webpacker 3.3.1 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
- })