utils.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. 'use strict'
  2. const path = require('path')
  3. const config = require('../config')
  4. const ExtractTextPlugin = require('extract-text-webpack-plugin')
  5. exports.assetsPath = function(_path) {
  6. const assetsSubDirectory = process.env.NODE_ENV === 'production' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory
  7. return path.posix.join(assetsSubDirectory, _path)
  8. }
  9. exports.cssLoaders = function(options) {
  10. options = options || {}
  11. const cssLoader = {
  12. loader: 'css-loader',
  13. options: {
  14. minimize: process.env.NODE_ENV === 'production',
  15. sourceMap: options.sourceMap
  16. }
  17. }
  18. // generate loader string to be used with extract text plugin
  19. function generateLoaders(loader, loaderOptions) {
  20. const loaders = [cssLoader]
  21. if (loader) {
  22. loaders.push({
  23. loader: loader + '-loader',
  24. options: Object.assign({}, loaderOptions, {
  25. sourceMap: options.sourceMap
  26. })
  27. })
  28. }
  29. // Extract CSS when that option is specified
  30. // (which is the case during production build)
  31. if (options.extract) {
  32. return ExtractTextPlugin.extract({
  33. use: loaders,
  34. fallback: 'vue-style-loader'
  35. })
  36. } else {
  37. return ['vue-style-loader'].concat(loaders)
  38. }
  39. }
  40. // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  41. return {
  42. css: generateLoaders(),
  43. postcss: generateLoaders(),
  44. less: generateLoaders('less'),
  45. sass: generateLoaders('sass', {indentedSyntax: true}),
  46. scss: generateLoaders('sass'),
  47. stylus: generateLoaders('stylus'),
  48. styl: generateLoaders('stylus')
  49. }
  50. }
  51. // Generate loaders for standalone style files (outside of .vue)
  52. exports.styleLoaders = function(options) {
  53. const output = []
  54. const loaders = exports.cssLoaders(options)
  55. for (const extension in loaders) {
  56. const loader = loaders[extension]
  57. output.push({
  58. test: new RegExp('\\.' + extension + '$'),
  59. use: loader
  60. })
  61. }
  62. return output
  63. }