| 'use strict' |
| const path = require('path') |
| const config = require('../config/index') |
| const ExtractTextPlugin = require('extract-text-webpack-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 }), |
| scss: generateLoaders('sass'), |
| 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') |
| }) |
| } |
| } |