webpack.config.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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. //portal 门户
  166. new HtmlWebpackPlugin({
  167. title: '主页-需求搜索',
  168. filename: 'portal/search/demand.html',
  169. template: './template/template.html',
  170. chunks: ['portal/search/demand', 'vendors']
  171. }),
  172. new HtmlWebpackPlugin({
  173. title: '主页-科技成果搜索',
  174. filename: 'portal/search/achievement.html',
  175. template: './template/template.html',
  176. chunks: ['portal/search/achievement', 'vendors']
  177. })
  178. ];
  179. if (!isDev) {
  180. //这个使用uglifyJs压缩你的js代码
  181. plugins.unshift(new webpack.DefinePlugin({
  182. "process.env": {
  183. NODE_ENV: JSON.stringify("production")
  184. }
  185. }));
  186. plugins.unshift(new webpack.optimize.UglifyJsPlugin({
  187. minimize: true,
  188. compress: {
  189. warnings: true
  190. }
  191. }));
  192. }
  193. let staticHost = 'http://afts.hnzhiming.com';
  194. switch (argv.env.deploy) {
  195. case 'stage':
  196. staticHost = 'http://aftts.hnzhiming.com';
  197. break;
  198. case 'prod':
  199. staticHost = 'http://static.goafanti.com';
  200. break;
  201. default:
  202. break;
  203. }
  204. staticHost = staticHost + '/' + version + '/';
  205. theme['@icon-url'] = '"' + staticHost + 'css/iconfont/iconfont"'
  206. return {
  207. entry: isWatch ? entries.watch : entries.prod,
  208. output: {
  209. path: path.resolve(__dirname, './build/' + argv.env.deploy + '/' + version),
  210. filename: '[name].js',
  211. publicPath: staticHost,
  212. chunkFilename: 'chunks/[name].[hash:8].js'
  213. },
  214. module: {
  215. rules: [{
  216. test: /\.jsx?$/,
  217. exclude: /node_modules/,
  218. use: {
  219. loader: 'babel-loader',
  220. options: {
  221. "presets": ["es2015", "react"],
  222. "plugins": [
  223. ["antd", {
  224. "style": true
  225. }]
  226. ]
  227. }
  228. }
  229. },
  230. {
  231. test: /\.less$/,
  232. use: ExtractTextPlugin.extract({
  233. fallback: 'style-loader',
  234. use: [{
  235. loader: 'css-loader',
  236. options: {
  237. importLoaders: 1
  238. }
  239. }, {
  240. loader: 'less-loader',
  241. options: {
  242. modifyVars: theme
  243. }
  244. }]
  245. })
  246. }, {
  247. test: /\.(png|jpg)$/,
  248. use: [{
  249. loader: 'url-loader',
  250. options: {
  251. limit: 8192,
  252. name: '[path][name].[ext]'
  253. }
  254. }]
  255. }, {
  256. test: /\.(woff|svg|eot|ttf)$/,
  257. use: [{
  258. loader: 'url-loader',
  259. options: {
  260. limit: 1,
  261. name: '[path][name].[ext]'
  262. }
  263. }]
  264. }
  265. ]
  266. },
  267. resolve: {
  268. extensions: ['.js', '.jsx']
  269. },
  270. plugins: plugins
  271. };
  272. })();