webpack.config.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. const webpack = require('webpack');
  2. const path = require('path');
  3. const ExtractTextPlugin = require("extract-text-webpack-plugin");
  4. const HtmlWebpackPlugin = require('html-webpack-plugin');
  5. const WebpackDevServer = require('webpack-dev-server');
  6. const entries = require('./entry.js');
  7. const version = require('./package.json').version;
  8. const argv = require('yargs').argv;
  9. let theme = {
  10. '@primary-color': '#58a3ff',
  11. '@link-color': '#58a3ff'
  12. };
  13. let isWatch = argv.env.deploy == 'watch';
  14. let isDev = isWatch || argv.env.deploy == 'dev';
  15. module.exports = (function () {
  16. let plugins = [
  17. new ExtractTextPlugin({
  18. filename: "[name].css",
  19. disable: false,
  20. allChunks: true
  21. }),
  22. //把入口文件里面的数组打包成verdors.js
  23. new webpack.optimize.CommonsChunkPlugin({
  24. name: 'vendors'
  25. }),
  26. //user
  27. new HtmlWebpackPlugin({
  28. title: '用户首页',
  29. filename: 'user/index.html',
  30. template: './template/template.html',
  31. chunks: ['user/index', 'vendors']
  32. }),
  33. new HtmlWebpackPlugin({
  34. title: '用户登录',
  35. filename: 'user/login.html',
  36. template: './template/template.html',
  37. chunks: ['user/login', 'vendors']
  38. }),
  39. new HtmlWebpackPlugin({
  40. title: '用户注册',
  41. filename: 'user/signIn.html',
  42. template: './template/template.html',
  43. chunks: ['user/signIn', 'vendors']
  44. }),
  45. new HtmlWebpackPlugin({
  46. title: '个人用户认证',
  47. filename: 'user/certify.html',
  48. template: './template/template.html',
  49. chunks: ['user/certify', 'vendors']
  50. }),
  51. new HtmlWebpackPlugin({
  52. title: '团体用户认证',
  53. filename: 'user/groupCertify.html',
  54. template: './template/template.html',
  55. chunks: ['user/groupCertify', 'vendors']
  56. }),
  57. //user-account
  58. new HtmlWebpackPlugin({
  59. title: '用户中心-首页',
  60. filename: 'user/account/index.html',
  61. template: './template/template.html',
  62. chunks: ['user/account/index', 'vendors']
  63. }),
  64. new HtmlWebpackPlugin({
  65. title: '用户中心-设置',
  66. filename: 'user/account/set.html',
  67. template: './template/template.html',
  68. chunks: ['user/account/set', 'vendors']
  69. }),
  70. new HtmlWebpackPlugin({
  71. title: '用户中心-科技服务',
  72. filename: 'user/account/services.html',
  73. template: './template/template.html',
  74. chunks: ['user/account/services', 'vendors']
  75. }),
  76. new HtmlWebpackPlugin({
  77. title: '用户中心-科技服务',
  78. filename: 'user/account/achievement.html',
  79. template: './template/template.html',
  80. chunks: ['user/account/achievement', 'vendors']
  81. }),
  82. new HtmlWebpackPlugin({
  83. title: '用户中心-科技服务',
  84. filename: 'user/account/demand.html',
  85. template: './template/template.html',
  86. chunks: ['user/account/demand', 'vendors']
  87. }),
  88. //admin
  89. new HtmlWebpackPlugin({
  90. title: '管理员-首页',
  91. filename: 'admin/index.html',
  92. template: './template/template.html',
  93. chunks: ['admin/index', 'vendors']
  94. }),
  95. new HtmlWebpackPlugin({
  96. title: '管理员-登录',
  97. filename: 'admin/login.html',
  98. template: './template/template.html',
  99. chunks: ['admin/login', 'vendors']
  100. }),
  101. new HtmlWebpackPlugin({
  102. title: '管理员-用户管理',
  103. filename: 'admin/userManage.html',
  104. template: './template/template.html',
  105. chunks: ['admin/userManage', 'vendors']
  106. }),
  107. //admin-servicesManage
  108. new HtmlWebpackPlugin({
  109. title: '管理员-科技服务管理-专利',
  110. filename: 'admin/servicesManage/contract.html',
  111. template: './template/template.html',
  112. chunks: ['admin/servicesManage/contract', 'vendors']
  113. }),
  114. new HtmlWebpackPlugin({
  115. title: '管理员-科技服务管理-专利',
  116. filename: 'admin/servicesManage/patent.html',
  117. template: './template/template.html',
  118. chunks: ['admin/servicesManage/patent', 'vendors']
  119. }),
  120. new HtmlWebpackPlugin({
  121. title: '管理员-科技服务管理-软著',
  122. filename: 'admin/servicesManage/copyright.html',
  123. template: './template/template.html',
  124. chunks: ['admin/servicesManage/copyright', 'vendors']
  125. }),
  126. new HtmlWebpackPlugin({
  127. title: '管理员-科技服务管理-高企',
  128. filename: 'admin/servicesManage/highTech.html',
  129. template: './template/template.html',
  130. chunks: ['admin/servicesManage/highTech', 'vendors']
  131. }),
  132. new HtmlWebpackPlugin({
  133. title: '管理员-科技服务管理-高企信息',
  134. filename: 'admin/servicesManage/highTechInfo.html',
  135. template: './template/template.html',
  136. chunks: ['admin/servicesManage/highTechInfo', 'vendors']
  137. }),
  138. new HtmlWebpackPlugin({
  139. title: '管理员-科技服务管理-科技',
  140. filename: 'admin/servicesManage/technology.html',
  141. template: './template/template.html',
  142. chunks: ['admin/servicesManage/technology', 'vendors']
  143. }),
  144. //admin-demand
  145. new HtmlWebpackPlugin({
  146. title: '管理员-用户管理',
  147. filename: 'admin/demand.html',
  148. template: './template/template.html',
  149. chunks: ['admin/demand', 'vendors']
  150. }),
  151. //admin-achievement
  152. new HtmlWebpackPlugin({
  153. title: '管理员-用户管理',
  154. filename: 'admin/achievement.html',
  155. template: './template/template.html',
  156. chunks: ['admin/achievement', 'vendors']
  157. }),
  158. //admin-set
  159. new HtmlWebpackPlugin({
  160. title: '管理员-用户管理',
  161. filename: 'admin/set.html',
  162. template: './template/template.html',
  163. chunks: ['admin/set', 'vendors']
  164. })
  165. ];
  166. if (!isDev) {
  167. //这个使用uglifyJs压缩你的js代码
  168. plugins.unshift(new webpack.DefinePlugin({
  169. "process.env": {
  170. NODE_ENV: JSON.stringify("production")
  171. }
  172. }));
  173. plugins.unshift(new webpack.optimize.UglifyJsPlugin({
  174. minimize: true,
  175. compress: {
  176. warnings: true
  177. }
  178. }));
  179. }
  180. let staticHost = 'http://afts.hnzhiming.com';
  181. switch (argv.env.deploy) {
  182. case 'stage':
  183. staticHost = 'http://aftts.hnzhiming.com';
  184. break;
  185. case 'prod':
  186. staticHost = 'http://static.goafanti.com';
  187. break;
  188. default:
  189. break;
  190. }
  191. staticHost = staticHost + '/' + version + '/';
  192. theme['@icon-url'] = '"' + staticHost + 'css/iconfont/iconfont"'
  193. return {
  194. entry: isWatch ? entries.watch : entries.prod,
  195. output: {
  196. path: path.resolve(__dirname, './build/' + argv.env.deploy + '/' + version),
  197. filename: '[name].js',
  198. publicPath: staticHost,
  199. chunkFilename: 'chunks/[name].[hash:8].js'
  200. },
  201. module: {
  202. rules: [{
  203. test: /\.jsx?$/,
  204. exclude: /node_modules/,
  205. use: {
  206. loader: 'babel-loader',
  207. options: {
  208. "presets": ["es2015", "react"],
  209. "plugins": [
  210. ["antd", {
  211. "style": true
  212. }]
  213. ]
  214. }
  215. }
  216. },
  217. {
  218. test: /\.less$/,
  219. use: ExtractTextPlugin.extract({
  220. fallback: 'style-loader',
  221. use: [{
  222. loader: 'css-loader',
  223. options: {
  224. importLoaders: 1
  225. }
  226. }, {
  227. loader: 'less-loader',
  228. options: {
  229. modifyVars: theme
  230. }
  231. }]
  232. })
  233. }, {
  234. test: /\.(png|jpg)$/,
  235. use: [{
  236. loader: 'url-loader',
  237. options: {
  238. limit: 8192,
  239. name: '[path][name].[ext]'
  240. }
  241. }]
  242. }, {
  243. test: /\.(woff|svg|eot|ttf)$/,
  244. use: [{
  245. loader: 'url-loader',
  246. options: {
  247. limit: 1,
  248. name: '[path][name].[ext]'
  249. }
  250. }]
  251. }
  252. ]
  253. },
  254. resolve: {
  255. extensions: ['.js', '.jsx']
  256. },
  257. plugins: plugins
  258. };
  259. })();