Created
May 11, 2018 02:24
-
-
Save hanxue/74691af423247c9028c7ff811f373608 to your computer and use it in GitHub Desktop.
Webpack 4 replace ExtractTextPlugin.extract()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| require('./check-versions')() | |
| process.env.NODE_ENV = 'production' | |
| const ora = require('ora') | |
| const rm = require('rimraf') | |
| const path = require('path') | |
| const chalk = require('chalk') | |
| const webpack = require('webpack') | |
| const config = require('../config') | |
| const webpackConfig = require('./webpack.prod.conf') | |
| const spinner = ora('building for production...') | |
| spinner.start() | |
| rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { | |
| if (err) throw err | |
| webpack(webpackConfig, (err, stats) => { | |
| spinner.stop() | |
| if (err) throw err | |
| process.stdout.write(stats.toString({ | |
| colors: true, | |
| modules: false, | |
| children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. | |
| chunks: false, | |
| chunkModules: false | |
| }) + '\n\n') | |
| if (stats.hasErrors()) { | |
| console.log(chalk.red(' Build failed with errors.\n')) | |
| process.exit(1) | |
| } | |
| console.log(chalk.cyan(' Build complete.\n')) | |
| console.log(chalk.yellow( | |
| ' Tip: built files are meant to be served over an HTTP server.\n' + | |
| ' Opening index.html over file:// won\'t work.\n' | |
| )) | |
| }) | |
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const chalk = require('chalk') | |
| const semver = require('semver') | |
| const packageConfig = require('../package.json') | |
| const shell = require('shelljs') | |
| function exec (cmd) { | |
| return require('child_process').execSync(cmd).toString().trim() | |
| } | |
| const versionRequirements = [ | |
| { | |
| name: 'node', | |
| currentVersion: semver.clean(process.version), | |
| versionRequirement: packageConfig.engines.node | |
| } | |
| ] | |
| if (shell.which('npm')) { | |
| versionRequirements.push({ | |
| name: 'npm', | |
| currentVersion: exec('npm --version'), | |
| versionRequirement: packageConfig.engines.npm | |
| }) | |
| } | |
| module.exports = function () { | |
| const warnings = [] | |
| for (let i = 0; i < versionRequirements.length; i++) { | |
| const mod = versionRequirements[i] | |
| if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { | |
| warnings.push(mod.name + ': ' + | |
| chalk.red(mod.currentVersion) + ' should be ' + | |
| chalk.green(mod.versionRequirement) | |
| ) | |
| } | |
| } | |
| if (warnings.length) { | |
| console.log('') | |
| console.log(chalk.yellow('To use this template, you must update following to modules:')) | |
| console.log() | |
| for (let i = 0; i < warnings.length; i++) { | |
| const warning = warnings[i] | |
| console.log(' ' + warning) | |
| } | |
| console.log() | |
| process.exit(1) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const merge = require('webpack-merge') | |
| const prodEnv = require('./prod.env') | |
| module.exports = merge(prodEnv, { | |
| NODE_ENV: '"development"' | |
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| // Template version: 1.2.8 | |
| // see http://vuejs-templates.github.io/webpack for documentation. | |
| const path = require('path') | |
| module.exports = { | |
| dev: { | |
| // Paths | |
| assetsSubDirectory: 'static', | |
| assetsPublicPath: '/', | |
| proxyTable: {}, | |
| // Various Dev Server settings | |
| host: '0.0.0.0', // can be overwritten by process.env.HOST | |
| port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined | |
| autoOpenBrowser: false, | |
| errorOverlay: true, | |
| notifyOnErrors: true, | |
| poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- | |
| // Use Eslint Loader? | |
| // If true, your code will be linted during bundling and | |
| // linting errors and warnings will be shown in the console. | |
| useEslint: true, | |
| // If true, eslint errors and warnings will also be shown in the error overlay | |
| // in the browser. | |
| showEslintErrorsInOverlay: false, | |
| /** | |
| * Source Maps | |
| */ | |
| // https://webpack.js.org/configuration/devtool/#development | |
| devtool: 'cheap-module-eval-source-map', | |
| // If you have problems debugging vue-files in devtools, | |
| // set this to false - it *may* help | |
| // https://vue-loader.vuejs.org/en/options.html#cachebusting | |
| cacheBusting: true, | |
| cssSourceMap: true, | |
| }, | |
| build: { | |
| // Template for index.html | |
| index: path.resolve(__dirname, '../dist/index.html'), | |
| // Paths | |
| assetsRoot: path.resolve(__dirname, '../dist'), | |
| assetsSubDirectory: 'static', | |
| assetsPublicPath: '/', | |
| /** | |
| * Source Maps | |
| */ | |
| productionSourceMap: true, | |
| // https://webpack.js.org/configuration/devtool/#production | |
| devtool: '#source-map', | |
| // Gzip off by default as many popular static hosts such as | |
| // Surge or Netlify already gzip all static assets for you. | |
| // Before setting to `true`, make sure to: | |
| // npm install --save-dev compression-webpack-plugin | |
| productionGzip: false, | |
| productionGzipExtensions: ['js', 'css'], | |
| // Run the build command with an extra argument to | |
| // View the bundle analyzer report after build finishes: | |
| // `npm run build --report` | |
| // Set to `true` or `false` to always turn it on or off | |
| bundleAnalyzerReport: process.env.npm_config_report | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "jinrong", | |
| "version": "0.1.0", | |
| "description": "Jinrong calculation project", | |
| "author": "Lee Hanxue <[email protected]>", | |
| "private": true, | |
| "scripts": { | |
| "dll": "webpack --config build/webpack.dll.config.js", | |
| "postinstall": "yarn run dll", | |
| "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", | |
| "inspect": "node --inspect-brk node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --progress --config build/webpack.dev.conf.js", | |
| "start": "npm run dev", | |
| "unit": "jest --config test/unit/jest.conf.js --coverage", | |
| "e2e": "node test/e2e/runner.js", | |
| "test": "npm run unit && npm run e2e", | |
| "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs", | |
| "build": "node build/build.js" | |
| }, | |
| "dependencies": { | |
| "@handsontable/vue": "^2.0.0-beta1", | |
| "accounting": "^0.4.1", | |
| "bcryptjs": "^2.4.3", | |
| "chart.js": "^2.7.1", | |
| "handsontable": "^0.38.1", | |
| "semantic-ui-css": "^2.2.12", | |
| "vue": "2.5.2", | |
| "vue-chartjs": "^3.1.1", | |
| "vue-material": "^1.0.0-beta-8", | |
| "vue-router": "^3.0.1", | |
| "vuelidate": "^0.6.1", | |
| "vuetable-2": "^1.7.2", | |
| "vuex": "^3.0.1" | |
| }, | |
| "devDependencies": { | |
| "autoprefixer": "^8.2.0", | |
| "babel-core": "^6.22.1", | |
| "babel-eslint": "^8.2.2", | |
| "babel-helper-vue-jsx-merge-props": "^2.0.3", | |
| "babel-jest": "^22.4.3", | |
| "babel-loader": "^7.1.4", | |
| "babel-plugin-dynamic-import-node": "^1.2.0", | |
| "babel-plugin-syntax-jsx": "^6.18.0", | |
| "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", | |
| "babel-plugin-transform-runtime": "^6.22.0", | |
| "babel-plugin-transform-vue-jsx": "^3.7.0", | |
| "babel-preset-env": "^1.3.2", | |
| "babel-preset-stage-2": "^6.24.1", | |
| "babel-register": "^6.22.0", | |
| "chalk": "^2.3.2", | |
| "chromedriver": "^2.37.0", | |
| "clean-webpack-plugin": "^0.1.19", | |
| "copy-webpack-plugin": "^4.5.1", | |
| "cross-spawn": "^6.0.5", | |
| "css-loader": "^0.28.11", | |
| "eslint": "^4.19.1", | |
| "eslint-config-airbnb-base": "^12.1.0", | |
| "eslint-friendly-formatter": "^4.0.0", | |
| "eslint-import-resolver-webpack": "^0.8.3", | |
| "eslint-loader": "^2.0.0", | |
| "eslint-plugin-html": "^4.0.2", | |
| "eslint-plugin-import": "^2.7.0", | |
| "eslint-plugin-vue": "^4.4.0", | |
| "extract-text-webpack-plugin": "^4.0.0-alpha.0", | |
| "file-loader": "^1.1.4", | |
| "friendly-errors-webpack-plugin": "^1.6.1", | |
| "fsevents": "^1.1.3", | |
| "html-webpack-plugin": "3.1.0", | |
| "inline-chunk-manifest-html-webpack-plugin": "^2.0.0", | |
| "jest": "^22.4.3", | |
| "jest-serializer-vue": "^1.0.0", | |
| "mini-css-extract-plugin": "^0.4.0", | |
| "nightwatch": "^0.9.20", | |
| "node-notifier": "^5.1.2", | |
| "node-sass": "^4.8.3", | |
| "npm-install-webpack-plugin": "^4.0.5", | |
| "npm-install-webpack2-plugin": "^5.0.1", | |
| "optimize-css-assets-webpack-plugin": "^4.0.0", | |
| "ora": "^2.0.0", | |
| "portfinder": "^1.0.13", | |
| "postcss-import": "^11.0.0", | |
| "postcss-loader": "^2.1.3", | |
| "postcss-url": "^7.2.1", | |
| "rimraf": "^2.6.0", | |
| "sass-loader": "^6.0.7", | |
| "selenium-server": "^3.11.0", | |
| "semver": "^5.3.0", | |
| "shelljs": "^0.8.1", | |
| "tapable": "^1.0.0", | |
| "uglifyjs-webpack-plugin": "^1.2.4", | |
| "url-loader": "^1.0.1", | |
| "vue-jest": "^2.3.0", | |
| "vue-loader": "^14.2.2", | |
| "vue-style-loader": "^4.1.0", | |
| "vue-template-compiler": "2.5.2", | |
| "webpack": "^4.2.0", | |
| "webpack-bundle-analyzer": "^2.10.0", | |
| "webpack-chunk-hash": "^0.5.0", | |
| "webpack-cli": "^2.0.13", | |
| "webpack-dev-server": "^3.1.1", | |
| "webpack-manifest-plugin": "^2.0.0-rc.2", | |
| "webpack-merge": "^4.1.0" | |
| }, | |
| "engines": { | |
| "node": ">= 7.5.0", | |
| "npm": ">= 3.0.0" | |
| }, | |
| "browserslist": [ | |
| "> 1%", | |
| "last 2 versions", | |
| "not ie <= 8" | |
| ] | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| module.exports = { | |
| NODE_ENV: '"production"' | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const merge = require('webpack-merge') | |
| const devEnv = require('./dev.env') | |
| module.exports = merge(devEnv, { | |
| NODE_ENV: '"testing"' | |
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const path = require('path') | |
| const config = require('../config') | |
| const MiniCssExtractPlugin = require("mini-css-extract-plugin") | |
| const packageConfig = require('../package.json') | |
| exports.assetsPath = function (_path) { | |
| const assetsSubDirectory = process.env.NODE_ENV === 'production' | |
| ? config.build.assetsSubDirectory | |
| : config.dev.assetsSubDirectory | |
| return path.posix.join(assetsSubDirectory, _path) | |
| } | |
| exports.cssLoaders = function (options) { | |
| options = options || {} | |
| const cssLoader = { | |
| loader: 'css-loader', | |
| options: { | |
| sourceMap: options.sourceMap | |
| } | |
| } | |
| const postcssLoader = { | |
| loader: 'postcss-loader', | |
| options: { | |
| sourceMap: options.sourceMap | |
| } | |
| } | |
| // generate loader string to be used with extract text plugin | |
| function generateLoaders (loader, loaderOptions) { | |
| const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] | |
| if (loader) { | |
| loaders.push({ | |
| loader: loader + '-loader', | |
| options: Object.assign({}, loaderOptions, { | |
| sourceMap: options.sourceMap | |
| }) | |
| }) | |
| } | |
| // Extract CSS when that option is specified | |
| // (which is the case during production build) | |
| // if (options.extract) { | |
| // return ExtractTextPlugin.extract({ | |
| // use: loaders, | |
| // fallback: 'vue-style-loader' | |
| // }) | |
| // } else { | |
| return ['vue-style-loader'].concat(loaders) | |
| // } | |
| } | |
| // https://vue-loader.vuejs.org/en/configurations/extract-css.html | |
| return { | |
| css: generateLoaders(), | |
| postcss: generateLoaders(), | |
| less: generateLoaders('less'), | |
| sass: generateLoaders('sass', { indentedSyntax: true }), | |
| // sass: generateLoaders('vue-style-loader', { indentedSyntax: true }), | |
| scss: generateLoaders('sass'), | |
| // scss: generateLoaders('vue-style-loader'), | |
| stylus: generateLoaders('stylus'), | |
| styl: generateLoaders('stylus') | |
| } | |
| } | |
| // Generate loaders for standalone style files (outside of .vue) | |
| exports.styleLoaders = function (options) { | |
| const output = [] | |
| const loaders = exports.cssLoaders(options) | |
| for (const extension in loaders) { | |
| const loader = loaders[extension] | |
| output.push({ | |
| test: new RegExp('\\.' + extension + '$'), | |
| use: loader | |
| }) | |
| } | |
| return output | |
| } | |
| exports.createNotifierCallback = () => { | |
| const notifier = require('node-notifier') | |
| return (severity, errors) => { | |
| if (severity !== 'error') return | |
| const error = errors[0] | |
| const filename = error.file && error.file.split('!').pop() | |
| notifier.notify({ | |
| title: packageConfig.name, | |
| message: severity + ': ' + error.name, | |
| subtitle: filename || '', | |
| icon: path.join(__dirname, 'logo.png') | |
| }) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const utils = require('./utils') | |
| const config = require('../config') | |
| const isProduction = process.env.NODE_ENV === 'production' | |
| const sourceMapEnabled = isProduction | |
| ? config.build.productionSourceMap | |
| : config.dev.cssSourceMap | |
| module.exports = { | |
| // module: { | |
| // rules: [ | |
| // { | |
| // test: /\.css$/, | |
| // use: [ 'style-loader', 'css-loader' ] | |
| // } | |
| // ] | |
| // }, | |
| loaders: utils.cssLoaders({ | |
| sourceMap: sourceMapEnabled, | |
| extract: isProduction | |
| }), | |
| loaders: { | |
| // Since sass-loader (weirdly) has SCSS as its default parse mode, we map | |
| // the "scss" and "sass" values for the lang attribute to the right configs here. | |
| // other preprocessors should work out of the box, no loader config like this necessary. | |
| 'scss': 'vue-style-loader!css-loader!sass-loader', | |
| 'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax' | |
| }, | |
| cssSourceMap: sourceMapEnabled, | |
| cacheBusting: config.dev.cacheBusting, | |
| transformToRequire: { | |
| video: ['src', 'poster'], | |
| source: 'src', | |
| img: 'src', | |
| image: 'xlink:href' | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const path = require('path') | |
| const utils = require('./utils') | |
| const config = require('../config') | |
| const pkg = require("../package.json") | |
| const vueLoaderConfig = require('./vue-loader.conf') | |
| const webpack = require('webpack') | |
| function resolve (dir) { | |
| return path.join(__dirname, '..', dir) | |
| } | |
| const createLintingRule = () => ({ | |
| test: /\.(js|vue)$/, | |
| loader: 'eslint-loader', | |
| enforce: 'pre', | |
| include: [resolve('src'), resolve('test')], | |
| options: { | |
| formatter: require('eslint-friendly-formatter'), | |
| emitWarning: !config.dev.showEslintErrorsInOverlay | |
| } | |
| }) | |
| module.exports = { | |
| context: path.resolve(__dirname, '../'), | |
| entry: { | |
| app: './src/main.js', | |
| }, | |
| output: { | |
| path: config.build.assetsRoot, | |
| library: '[name]_[hash]', | |
| filename: '[name].dll.js', | |
| publicPath: process.env.NODE_ENV === 'production' | |
| ? config.build.assetsPublicPath | |
| : config.dev.assetsPublicPath | |
| }, | |
| optimization: { | |
| splitChunks: { | |
| cacheGroups: { | |
| commons: { | |
| test: /[\\/]node_modules[\\/]/, | |
| name: "vendors", | |
| chunks: "all" | |
| } | |
| } | |
| } | |
| }, | |
| plugins: [ | |
| new webpack.DllReferencePlugin({ | |
| // path: config.build.assetsRoot, | |
| // name: "[name]_[hash]", | |
| manifest: require("../dist/dependencies.dll.manifest.json"), | |
| }), | |
| new webpack.EnvironmentPlugin(['RONGDA_AUTH']), | |
| ], | |
| resolve: { | |
| extensions: ['.js', '.vue', '.json'], | |
| symlinks: false, | |
| alias: { | |
| 'vue$': 'vue/dist/vue.esm.js', | |
| '@': resolve('src'), | |
| } | |
| }, | |
| module: { | |
| rules: [ | |
| ...(config.dev.useEslint ? [createLintingRule()] : []), | |
| { | |
| test: /\.vue$/, | |
| loader: 'vue-loader', | |
| options: vueLoaderConfig | |
| }, | |
| { | |
| test: /\.js$/, | |
| loader: 'babel-loader?cacheDirectory', | |
| include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] | |
| }, | |
| { | |
| test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, | |
| loader: 'url-loader', | |
| options: { | |
| limit: 10000, | |
| name: utils.assetsPath('img/[name].[hash:7].[ext]') | |
| } | |
| }, | |
| { | |
| test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, | |
| loader: 'url-loader', | |
| options: { | |
| limit: 10000, | |
| name: utils.assetsPath('media/[name].[hash:7].[ext]') | |
| } | |
| }, | |
| { | |
| test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, | |
| loader: 'url-loader', | |
| options: { | |
| limit: 10000, | |
| name: utils.assetsPath('fonts/[name].[hash:7].[ext]') | |
| } | |
| } | |
| ] | |
| }, | |
| node: { | |
| // prevent webpack from injecting useless setImmediate polyfill because Vue | |
| // source contains it (although only uses it if it's native). | |
| setImmediate: false, | |
| // prevent webpack from injecting mocks to Node native modules | |
| // that does not make sense for the client | |
| dgram: 'empty', | |
| fs: 'empty', | |
| net: 'empty', | |
| tls: 'empty', | |
| child_process: 'empty' | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const utils = require('./utils') | |
| const webpack = require('webpack') | |
| const config = require('../config') | |
| const merge = require('webpack-merge') | |
| const path = require('path') | |
| const baseWebpackConfig = require('./webpack.base.conf') | |
| const CopyWebpackPlugin = require('copy-webpack-plugin') | |
| const HtmlWebpackPlugin = require('html-webpack-plugin') | |
| const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') | |
| const NpmInstallPlugin = require('npm-install-webpack-plugin') | |
| const portfinder = require('portfinder') | |
| const HOST = process.env.HOST | |
| const PORT = process.env.PORT && Number(process.env.PORT) | |
| const devWebpackConfig = merge(baseWebpackConfig, { | |
| module: { | |
| rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) | |
| }, | |
| // cheap-module-eval-source-map is faster for development | |
| devtool: config.dev.devtool, | |
| // these devServer options should be customized in /config/index.js | |
| devServer: { | |
| host: '0.0.0.0', | |
| disableHostCheck: true, | |
| clientLogLevel: 'warning', | |
| historyApiFallback: { | |
| rewrites: [ | |
| { from: /.*/, to: path.join(config.dev.assetsPublicPath, 'index.html') }, | |
| ], | |
| }, | |
| hot: true, | |
| contentBase: false, // since we use CopyWebpackPlugin. | |
| compress: true, | |
| host: HOST || config.dev.host, | |
| port: PORT || config.dev.port, | |
| open: config.dev.autoOpenBrowser, | |
| overlay: config.dev.errorOverlay | |
| ? { warnings: false, errors: true } | |
| : false, | |
| publicPath: config.dev.assetsPublicPath, | |
| proxy: config.dev.proxyTable, | |
| quiet: true, // necessary for FriendlyErrorsPlugin | |
| watchOptions: { | |
| poll: config.dev.poll, | |
| } | |
| }, | |
| mode: "development", | |
| plugins: [ | |
| new webpack.LoaderOptionsPlugin({ options: {} }), | |
| new webpack.DefinePlugin({ | |
| 'process.env': require('../config/dev.env') | |
| }), | |
| new webpack.HotModuleReplacementPlugin(), | |
| new webpack.NoEmitOnErrorsPlugin(), | |
| // https://github.com/ampedandwired/html-webpack-plugin | |
| new HtmlWebpackPlugin({ | |
| filename: 'index.html', | |
| template: 'index.html', | |
| inject: true, | |
| externals: [ "../dist/dependencies.dll.js" ], | |
| }), | |
| // copy custom static assets | |
| new CopyWebpackPlugin([ | |
| { | |
| from: path.resolve(__dirname, '../static'), | |
| to: config.dev.assetsSubDirectory, | |
| ignore: ['.*'] | |
| } | |
| ]), | |
| // Temporarily disabled due to Webpack 4 bug | |
| // See https://github.com/webpack-contrib/npm-install-webpack-plugin/issues/122 | |
| // new NpmInstallPlugin({ | |
| // save: true // --save | |
| // }), | |
| ] | |
| }) | |
| module.exports = new Promise((resolve, reject) => { | |
| portfinder.basePort = process.env.PORT || config.dev.port | |
| portfinder.getPort((err, port) => { | |
| if (err) { | |
| reject(err) | |
| } else { | |
| // publish the new Port, necessary for e2e tests | |
| process.env.PORT = port | |
| // add port to devServer config | |
| devWebpackConfig.devServer.port = port | |
| // Add FriendlyErrorsPlugin | |
| devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ | |
| compilationSuccessInfo: { | |
| messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], | |
| }, | |
| onErrors: config.dev.notifyOnErrors | |
| ? utils.createNotifierCallback() | |
| : undefined | |
| })) | |
| resolve(devWebpackConfig) | |
| } | |
| }) | |
| }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const path = require("path") | |
| const webpack = require("webpack") | |
| const pkg = require("../package.json") | |
| const vueLoaderConfig = require('./vue-loader.conf') | |
| const outputPath = path.join(__dirname, "../dist") | |
| function resolve (dir) { | |
| return path.join(__dirname, '..', dir) | |
| } | |
| module.exports = { | |
| mode: 'development', | |
| context: process.cwd(), | |
| entry: { | |
| dependencies: [ //Object.keys(pkg.dependencies), | |
| 'vue', | |
| 'vue-material', | |
| 'vue-router', | |
| 'vuetable-2', | |
| 'vuelidate', | |
| 'handsontable', | |
| 'chart.js', | |
| 'vue-chartjs', | |
| 'accounting', | |
| 'semantic-ui-css', | |
| '@handsontable/vue', | |
| ], | |
| }, | |
| module: { | |
| rules: [ | |
| { | |
| test: /\.vue$/, | |
| loader: 'vue-loader', | |
| options: vueLoaderConfig | |
| }, | |
| { | |
| test: /\.js$/, | |
| loader: 'babel-loader?cacheDirectory', | |
| include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] | |
| }, | |
| ] | |
| }, | |
| output: { | |
| filename: "[name].dll.js", | |
| path: outputPath, | |
| library: "[name]", | |
| }, | |
| plugins: [ | |
| new webpack.DllPlugin({ | |
| context: __dirname, | |
| name: "[name]", | |
| path: path.join(outputPath, "[name].dll.manifest.json"), | |
| }), | |
| ], | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict' | |
| const path = require('path') | |
| const utils = require('./utils') | |
| const webpack = require('webpack') | |
| const config = require('../config') | |
| const merge = require('webpack-merge') | |
| const baseWebpackConfig = require('./webpack.base.conf') | |
| const CopyWebpackPlugin = require('copy-webpack-plugin') | |
| const HtmlWebpackPlugin = require('html-webpack-plugin') | |
| const MiniCssExtractPlugin = require("mini-css-extract-plugin") | |
| const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') | |
| const env = process.env.NODE_ENV === 'testing' | |
| ? require('../config/test.env') | |
| : require('../config/prod.env') | |
| const webpackConfig = merge(baseWebpackConfig, { | |
| module: { | |
| rules: utils.styleLoaders({ | |
| sourceMap: config.build.productionSourceMap, | |
| extract: true, | |
| usePostCSS: true | |
| }) | |
| }, | |
| devtool: "source-map", | |
| // entry: './src/main', | |
| output: { | |
| path: config.build.assetsRoot, | |
| filename: utils.assetsPath('js/[name].[hash].js'), | |
| chunkFilename: utils.assetsPath('js/[id].[hash].js') | |
| }, | |
| mode: "production", | |
| plugins: [ | |
| new MiniCssExtractPlugin({ | |
| filename: utils.assetsPath('css/"[name].[hash].css'), | |
| chunkFilename: "[id].[hash].css" | |
| }), | |
| // Compress extracted CSS. We are using this plugin so that possible | |
| // duplicated CSS from different components can be deduped. | |
| new OptimizeCSSPlugin({ | |
| cssProcessorOptions: config.build.productionSourceMap | |
| ? { safe: true, map: { inline: false } } | |
| : { safe: true } | |
| }), | |
| // generate dist index.html with correct asset hash for caching. | |
| // you can customize output by editing /index.html | |
| // see https://github.com/ampedandwired/html-webpack-plugin | |
| new HtmlWebpackPlugin({ | |
| filename: 'index.html', | |
| template: 'index.html', | |
| inject: true, | |
| // externals: [ "../dist/dependencies.dll.js" ], | |
| minify: { | |
| removeComments: true, | |
| collapseWhitespace: true, | |
| removeAttributeQuotes: true | |
| // more options: | |
| // https://github.com/kangax/html-minifier#options-quick-reference | |
| }, | |
| }), | |
| // keep module.id stable when vendor modules does not change | |
| new webpack.HashedModuleIdsPlugin(), | |
| // copy custom static assets | |
| new CopyWebpackPlugin([ | |
| { | |
| from: path.resolve(__dirname, '../static'), | |
| to: config.build.assetsSubDirectory, | |
| ignore: ['.*'] | |
| } | |
| ]) | |
| ] | |
| }) | |
| if (config.build.productionGzip) { | |
| const CompressionWebpackPlugin = require('compression-webpack-plugin') | |
| webpackConfig.plugins.push( | |
| new CompressionWebpackPlugin({ | |
| asset: '[path].gz[query]', | |
| algorithm: 'gzip', | |
| test: new RegExp( | |
| '\\.(' + | |
| config.build.productionGzipExtensions.join('|') + | |
| ')$' | |
| ), | |
| threshold: 10240, | |
| minRatio: 0.8 | |
| }) | |
| ) | |
| } | |
| if (config.build.bundleAnalyzerReport) { | |
| const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin | |
| webpackConfig.plugins.push(new BundleAnalyzerPlugin()) | |
| } | |
| module.exports = webpackConfig |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment