Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var path = require('path');
- var webpack = require('webpack');
- var Mix = require('laravel-mix').config;
- var plugins = require('laravel-mix').plugins;
- /*
- |--------------------------------------------------------------------------
- | Mix Initialization
- |--------------------------------------------------------------------------
- |
- | As our first step, we'll require the project's Laravel Mix file
- | and record the user's requested compilation and build steps.
- | Once those steps have been recorded, we may get to work.
- |
- */
- Mix.initialize();
- /*
- |--------------------------------------------------------------------------
- | Webpack Context
- |--------------------------------------------------------------------------
- |
- | This prop will determine the appropriate context, when running Webpack.
- | Since you have the option of publishing this webpack.config.js file
- | to your project root, we will dynamically set the path for you.
- |
- */
- module.exports.context = Mix.Paths.root();
- /*
- |--------------------------------------------------------------------------
- | Webpack Entry
- |--------------------------------------------------------------------------
- |
- | We'll first specify the entry point for Webpack. By default, we'll
- | assume a single bundled file, but you may call Mix.extract()
- | to make a separate bundle specifically for vendor libraries.
- |
- */
- module.exports.entry = Mix.entry();
- /*
- |--------------------------------------------------------------------------
- | Webpack Output
- |--------------------------------------------------------------------------
- |
- | Webpack naturally requires us to specify our desired output path and
- | file name. We'll simply echo what you passed to with Mix.js().
- | Note that, for Mix.version(), we'll properly hash the file.
- |
- */
- module.exports.output = Mix.output();
- /*
- |--------------------------------------------------------------------------
- | Rules
- |--------------------------------------------------------------------------
- |
- | Webpack rules allow us to register any number of loaders and options.
- | Out of the box, we'll provide a handful to get you up and running
- | as quickly as possible, though feel free to add to this list.
- |
- */
- module.exports.module = {
- rules: [
- {
- test: /\.jsx?$/,
- exclude: /(node_modules|bower_components)/,
- loader: 'babel-loader' + Mix.babelConfig(),
- query: {
- babelrc: false,
- presets: [
- 'es2015',
- 'react',
- 'stage-1'
- ]
- }
- },
- {
- test: /\.(png|jpg|gif)$/,
- loader: 'file-loader',
- options: {
- name: '[name].[ext]?[hash]'
- }
- },
- {
- test: /\.(woff2?|ttf|eot|svg|otf)$/,
- loader: 'file-loader',
- options: {
- name: 'fonts/[name].[ext]?[hash]',
- publicPath: '/'
- }
- }
- ]
- };
- if (Mix.cssPreprocessor) {
- Mix[Mix.cssPreprocessor].forEach(toCompile => {
- let extractPlugin = new plugins.ExtractTextPlugin(
- Mix.cssOutput(toCompile)
- );
- module.exports.module.rules.push({
- test: new RegExp(toCompile.src.path),
- loader: extractPlugin.extract({
- fallbackLoader: 'style-loader',
- loader: [
- 'css-loader',
- 'postcss-loader',
- 'resolve-url-loader',
- (Mix.cssPreprocessor == 'sass') ? 'sass-loader?sourceMap&precision=8' : 'less-loader'
- ]
- })
- });
- module.exports.plugins = (module.exports.plugins || []).concat(extractPlugin);
- });
- }
- /*
- |--------------------------------------------------------------------------
- | Resolve
- |--------------------------------------------------------------------------
- |
- | Here, we may set any options/aliases that affect Webpack's resolving
- | of modules
- |
- */
- module.exports.resolve = {
- extensions: ['*', '.js', '.jsx'],
- };
- /*
- |--------------------------------------------------------------------------
- | Stats
- |--------------------------------------------------------------------------
- |
- | By default, Webpack spits a lot of information out to the terminal,
- | each you time you compile. Let's keep things a bit more minimal
- | and hide a few of those bits and pieces. Adjust as you wish.
- |
- */
- module.exports.stats = {
- hash: false,
- version: false,
- timings: false,
- children: false,
- errors: false
- };
- module.exports.performance = { hints: false };
- /*
- |--------------------------------------------------------------------------
- | Devtool
- |--------------------------------------------------------------------------
- |
- | Sourcemaps allow us to access our original source code within the
- | browser, even if we're serving a bundled script or stylesheet.
- | You may activate sourcemaps, by adding Mix.sourceMaps().
- |
- */
- module.exports.devtool = Mix.sourcemaps;
- /*
- |--------------------------------------------------------------------------
- | Webpack Dev Server Configuration
- |--------------------------------------------------------------------------
- |
- | If you want to use that flashy hot module replacement feature, then
- | we've got you covered. Here, we'll set some basic initial config
- | for the Node server. You very likely won't want to edit this.
- |
- */
- module.exports.devServer = {
- historyApiFallback: true,
- noInfo: true,
- compress: true
- };
- /*
- |--------------------------------------------------------------------------
- | Plugins
- |--------------------------------------------------------------------------
- |
- | Lastly, we'll register a number of plugins to extend and configure
- | Webpack. To get you started, we've included a handful of useful
- | extensions, for versioning, OS notifications, and much more.
- |
- */
- module.exports.plugins = (module.exports.plugins || []).concat([
- new webpack.ProvidePlugin(Mix.autoload || {
- jQuery: 'jquery',
- $: 'jquery',
- jquery: 'jquery',
- 'window.jQuery': 'jquery'
- }),
- new plugins.FriendlyErrorsWebpackPlugin(),
- new plugins.StatsWriterPlugin({
- filename: "mix-manifest.json",
- transform: Mix.manifest.transform,
- }),
- new plugins.WebpackMd5HashPlugin(),
- new webpack.LoaderOptionsPlugin({
- minimize: Mix.inProduction,
- options: {
- postcss: [
- require('autoprefixer')
- ],
- context: __dirname,
- output: { path: './' }
- }
- })
- ]);
- if (Mix.notifications) {
- module.exports.plugins.push(
- new plugins.WebpackNotifierPlugin({
- title: 'Laravel Mix',
- alwaysNotify: true,
- contentImage: Mix.Paths.root('node_modules/laravel-mix/icons/laravel.png')
- })
- );
- }
- module.exports.plugins.push(
- new plugins.WebpackOnBuildPlugin(
- () => Mix.events.fire('build')
- )
- );
- if (Mix.versioning) {
- Mix.versioning.record();
- module.exports.plugins.push(
- new plugins.WebpackOnBuildPlugin(() => {
- Mix.versioning.prune(Mix.publicPath);
- })
- );
- }
- if (Mix.combine || Mix.minify) {
- module.exports.plugins.push(
- new plugins.WebpackOnBuildPlugin(() => {
- Mix.concatenateAll().minifyAll();
- })
- );
- }
- if (Mix.copy) {
- Mix.copy.forEach(copy => {
- module.exports.plugins.push(
- new plugins.CopyWebpackPlugin([copy])
- );
- });
- }
- if (Mix.js.vendor) {
- module.exports.plugins.push(
- new webpack.optimize.CommonsChunkPlugin({
- names: [Mix.js.base + '/vendor', Mix.js.base + '/' + 'manifest'],
- minChunks: Infinity
- })
- );
- }
- if (Mix.inProduction) {
- module.exports.plugins = module.exports.plugins.concat([
- new webpack.DefinePlugin({
- 'process.env': {
- NODE_ENV: '"production"'
- }
- }),
- new webpack.optimize.UglifyJsPlugin({
- sourceMap: true,
- compress: {
- warnings: false
- }
- })
- ]);
- }
- /*
- |--------------------------------------------------------------------------
- | Mix Finalizing
- |--------------------------------------------------------------------------
- |
- | Now that we've declared the entirety of our Webpack configuration, the
- | final step is to scan for any custom configuration in the Mix file.
- | If mix.webpackConfig() is called, we'll merge it in, and build!
- |
- */
- Mix.finalize(module.exports);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement