UNPKG

1.46 kBJavaScriptView Raw
1const { resolve } = require('path')
2const { safeLoad } = require('js-yaml')
3const { readFileSync } = require('fs')
4const deepMerge = require('./utils/deep_merge')
5const { isArray, ensureTrailingSlash } = require('./utils/helpers')
6const { railsEnv } = require('./env')
7
8const defaultConfigPath = require.resolve('../lib/install/config/webpacker.yml')
9const configPath = resolve('config', 'webpacker.yml')
10
11const getDefaultConfig = () => {
12 const defaultConfig = safeLoad(readFileSync(defaultConfigPath), 'utf8')
13 return defaultConfig[railsEnv] || defaultConfig.production
14}
15
16const defaults = getDefaultConfig()
17const app = safeLoad(readFileSync(configPath), 'utf8')[railsEnv]
18
19if (isArray(app.extensions) && app.extensions.length) delete defaults.extensions
20if (isArray(app.static_assets_extensions) && app.static_assets_extensions.length) {
21 delete defaults.static_assets_extensions
22}
23
24const config = deepMerge(defaults, app)
25config.outputPath = resolve(config.public_root_path, config.public_output_path)
26
27// Ensure that the publicPath includes our asset host so dynamic imports
28// (code-splitting chunks and static assets) load from the CDN instead of a relative path.
29const getPublicPath = () => {
30 const rootUrl = ensureTrailingSlash(process.env.WEBPACKER_ASSET_HOST || '/')
31 return `${rootUrl}${config.public_output_path}/`
32}
33
34config.publicPath = getPublicPath()
35config.publicPathWithoutCDN = `/${config.public_output_path}/`
36
37module.exports = config