utils.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var path = require('path')
  2. var config = require('../config')
  3. var ExtractTextPlugin = require('extract-text-webpack-plugin')
  4. exports.assetsPath = function (_path) {
  5. return path.posix.join(config.build.assetsSubDirectory, _path)
  6. }
  7. exports.cssLoaders = function (options) {
  8. options = options || {}
  9. // generate loader string to be used with extract text plugin
  10. function generateLoaders (loaders) {
  11. var sourceLoader = loaders.map(function (loader) {
  12. var extraParamChar
  13. if (/\?/.test(loader)) {
  14. loader = loader.replace(/\?/, '-loader?')
  15. extraParamChar = '&'
  16. } else {
  17. loader = loader + '-loader'
  18. extraParamChar = '?'
  19. }
  20. return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')
  21. }).join('!')
  22. if (options.extract) {
  23. return ExtractTextPlugin.extract('vue-style-loader', sourceLoader)
  24. } else {
  25. return ['vue-style-loader', sourceLoader].join('!')
  26. }
  27. }
  28. // http://vuejs.github.io/vue-loader/configurations/extract-css.html
  29. return {
  30. css: generateLoaders(['css']),
  31. postcss: generateLoaders(['css']),
  32. less: generateLoaders(['css', 'less']),
  33. sass: generateLoaders(['css', 'sass?indentedSyntax']),
  34. scss: generateLoaders(['css', 'sass']),
  35. stylus: generateLoaders(['css', 'stylus']),
  36. styl: generateLoaders(['css', 'stylus'])
  37. }
  38. }
  39. // Generate loaders for standalone style files (outside of .vue)
  40. exports.styleLoaders = function (options) {
  41. var output = []
  42. var loaders = exports.cssLoaders(options)
  43. for (var extension in loaders) {
  44. var loader = loaders[extension]
  45. output.push({
  46. test: new RegExp('\\.' + extension + '$'),
  47. loader: loader
  48. })
  49. }
  50. return output
  51. }