111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'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,
							 | 
						||
| 
								 | 
							
								        fallback: 'vue-style-loader',
							 | 
						||
| 
								 | 
							
								        publicPath: '../../'
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								    } 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' , { javascriptEnabled : true }),
							 | 
						||
| 
								 | 
							
								    sass: generateLoaders('sass', { indentedSyntax: true }),
							 | 
						||
| 
								 | 
							
								    scss: generateLoaders('sass').concat(
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        loader: 'sass-resources-loader',
							 | 
						||
| 
								 | 
							
								        options: {
							 | 
						||
| 
								 | 
							
								            //你自己的scss全局文件的路径
							 | 
						||
| 
								 | 
							
								          resources: path.resolve(__dirname, '../src/assets/styles/global.scss')
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    ),
							 | 
						||
| 
								 | 
							
								    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')
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |