utils.js 2.0 KB

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