| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 'use strict'const path = require('path')const config = require('../config')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,                publicPath: '../../', // 作用是设置打包过程中提取css的方法                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')        })    }}
 |