webpack.base.conf.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. 'use strict'
  2. const path = require('path')
  3. const utils = require('./utils')
  4. const config = require('../config')
  5. const vueLoaderConfig = require('./vue-loader.conf')
  6. const pathSrc = path.resolve(__dirname, '../src');
  7. function resolve(dir) {
  8. return path.join(__dirname, '..', dir)
  9. }
  10. const createLintingRule = () => ({
  11. test: /\.(js|vue)$/,
  12. loader: 'eslint-loader',
  13. enforce: 'pre',
  14. include: [resolve('src'), resolve('test')],
  15. options: {
  16. formatter: require('eslint-friendly-formatter'),
  17. emitWarning: !config.dev.showEslintErrorsInOverlay
  18. }
  19. })
  20. let babelLoader = {
  21. include: [
  22. resolve('src'), resolve('test'),
  23. resolve('node_modules/webpack-dev-server/client'),
  24. resolve('node_modules/vue-element-bigdata-table'),
  25. resolve('node_modules/element-ui/src'),
  26. resolve('node_modules/icore-sdk')
  27. ],
  28. exclude: [
  29. resolve('node_modules/element-ui/src/utils/date.js'),
  30. resolve('node_modules/element-ui/src/utils/popper.js')
  31. ]// sb element-ui竟然在源码里面单独把这两个js转译成了es5 气死哥了!!
  32. }
  33. if (pathSrc.indexOf('node_modules') > -1) {
  34. babelLoader = {
  35. include: [
  36. resolve('src'), resolve('test'),
  37. resolve('../../src'), resolve('../../test'),
  38. resolve('../webpack-dev-server/client'),
  39. resolve('../vue-element-bigdata-table'),
  40. resolve('../element-ui/src'),
  41. resolve('../icore-sdk')
  42. ],
  43. exclude: [
  44. resolve('../element-ui/src/utils/date.js'),
  45. resolve('../element-ui/src/utils/popper.js')
  46. ]// sb element-ui竟然在源码里面单独把这两个js转译成了es5 气死哥了!!
  47. }
  48. }
  49. module.exports = {
  50. context: path.resolve(__dirname, '../'),
  51. // entry: {
  52. // app: './src/main.js'
  53. // },
  54. entry: utils.entries(),
  55. output: {
  56. path: config.build.assetsRoot,
  57. filename: '[name].js',
  58. publicPath: process.env.NODE_ENV === 'production' ?
  59. config.build.assetsPublicPath :
  60. config.dev.assetsPublicPath
  61. },
  62. resolve: {
  63. extensions: ['.js', '.vue', '.json'],
  64. alias: {
  65. 'vue$': 'vue/dist/vue.esm.js',
  66. '@': resolve('src'),
  67. '~': resolve('../../src'),
  68. }
  69. },
  70. module: {
  71. rules: [
  72. ...(config.dev.useEslint ? [createLintingRule()] : []),
  73. {
  74. test: /\.vue$/,
  75. loader: 'vue-loader',
  76. options: vueLoaderConfig
  77. },
  78. {
  79. test: /\.js$/,
  80. loader: 'babel-loader',
  81. exclude: babelLoader.exclude,
  82. include: babelLoader.include
  83. },
  84. {
  85. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  86. loader: 'url-loader',
  87. options: {
  88. limit: 10000,
  89. name: utils.assetsPath('img/[name].[hash].[ext]')
  90. }
  91. },
  92. {
  93. test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
  94. loader: 'url-loader',
  95. options: {
  96. limit: 10000,
  97. name: utils.assetsPath('media/[name].[hash].[ext]')
  98. }
  99. },
  100. {
  101. test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
  102. loader: 'url-loader',
  103. options: {
  104. limit: 10000,
  105. name: utils.assetsPath('fonts/[name].[hash].[ext]')
  106. }
  107. }
  108. ]
  109. },
  110. node: {
  111. // prevent webpack from injecting useless setImmediate polyfill because Vue
  112. // source contains it (although only uses it if it's native).
  113. setImmediate: false,
  114. // prevent webpack from injecting mocks to Node native modules
  115. // that does not make sense for the client
  116. dgram: 'empty',
  117. fs: 'empty',
  118. net: 'empty',
  119. tls: 'empty',
  120. child_process: 'empty'
  121. }
  122. }