templates/rails_app/config/webpack/shared.js in railman-1.0.3 vs templates/rails_app/config/webpack/shared.js in railman-1.0.4
- old
+ new
@@ -1,80 +1,54 @@
-// Note: You must restart bin/webpack-watcher for changes to take effect
+// Note: You must restart bin/webpack-dev-server for changes to take effect
+/* eslint global-require: 0 */
+/* eslint import/no-dynamic-require: 0 */
+
const webpack = require('webpack')
-const path = require('path')
-const process = require('process')
-const glob = require('glob')
+const { basename, dirname, join, relative, resolve } = require('path')
+const { sync } = require('glob')
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
+const ManifestPlugin = require('webpack-manifest-plugin')
const extname = require('path-complete-extname')
+const { env, paths, publicPath, loadersDir } = require('./configuration.js')
-let distDir = process.env.WEBPACK_DIST_DIR
+const extensionGlob = `**/*{${paths.extensions.join(',')}}*`
+const packPaths = sync(join(paths.source, paths.entry, extensionGlob))
-if (distDir === undefined) {
- distDir = 'packs'
-}
-
-const config = {
- entry: glob.sync(path.join('app', 'javascript', 'packs', '*.js*')).reduce(
+module.exports = {
+ entry: packPaths.reduce(
(map, entry) => {
- const basename = path.basename(entry, extname(entry))
const localMap = map
- localMap[basename] = path.resolve(entry)
+ const namespace = relative(join(paths.source, paths.entry), dirname(entry))
+ localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry)
return localMap
}, {}
),
- output: { filename: '[name].js', path: path.resolve('public', distDir) },
+ output: {
+ filename: '[name].js',
+ path: resolve(paths.output, paths.entry),
+ publicPath
+ },
module: {
- rules: [
- {
- test: /.vue$/, loader: 'vue-loader',
- options: {
- loaders: { 'scss': 'vue-style-loader!css-loader!sass-loader', 'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'}
- }
- },
- { test: /.png$/, loader: 'url-loader?mimetype=image/png'},
- { test: /\.coffee(\.erb)?$/, loader: 'coffee-loader' },
- {
- test: /\.js(\.erb)?$/,
- exclude: /node_modules/,
- loader: 'babel-loader',
- options: {
- presets: [
- ['env', { modules: false }]
- ]
- }
- },
- {
- test: /\.erb$/,
- enforce: 'pre',
- exclude: /node_modules/,
- loader: 'rails-erb-loader',
- options: {
- runner: 'DISABLE_SPRING=1 bin/rails runner'
- }
- }
- ]
+ rules: sync(join(loadersDir, '*.js')).map(loader => require(loader))
},
plugins: [
- new webpack.EnvironmentPlugin(Object.keys(process.env))
+ new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(env))),
+ new ExtractTextPlugin(env.NODE_ENV === 'production' ? '[name]-[hash].css' : '[name].css'),
+ new ManifestPlugin({ fileName: paths.manifest, publicPath, writeToFileEmit: true })
],
resolve: {
- alias: { 'vue$':'vue/dist/vue.esm.js' },
- extensions: ['.js', '.coffee'],
+ extensions: paths.extensions,
modules: [
- path.resolve('app/javascript'),
- path.resolve('node_modules')
+ resolve(paths.source),
+ resolve(paths.node_modules)
]
},
resolveLoader: {
- modules: [path.resolve('node_modules')]
+ modules: [paths.node_modules]
}
-}
-
-module.exports = {
- distDir,
- config
}