mock平台

ykit.config.js 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. var path = require('path');
  2. var AssetsPlugin = require('assets-webpack-plugin');
  3. var CompressionPlugin = require('compression-webpack-plugin');
  4. var commonLib = require('./common/plugin.js');
  5. var assetsPluginInstance = new AssetsPlugin({
  6. filename: 'static/prd/assets.js',
  7. processOutput: function(assets) {
  8. return 'window.WEBPACK_ASSETS = ' + JSON.stringify(assets);
  9. }
  10. });
  11. var fs = require('fs');
  12. var package = require('./package.json');
  13. var yapi = require('./server/yapi');
  14. var isWin = require('os').platform() === 'win32'
  15. var compressPlugin = new CompressionPlugin({
  16. asset: '[path].gz[query]',
  17. algorithm: 'gzip',
  18. test: /\.(js|css)$/,
  19. threshold: 10240,
  20. minRatio: 0.8
  21. });
  22. function createScript(plugin, pathAlias) {
  23. let options = plugin.options ? JSON.stringify(plugin.options) : null;
  24. if (pathAlias === 'node_modules') {
  25. return `"${plugin.name}" : {module: require('yapi-plugin-${
  26. plugin.name
  27. }/client.js'),options: ${options}}`;
  28. }
  29. return `"${plugin.name}" : {module: require('${pathAlias}/yapi-plugin-${
  30. plugin.name
  31. }/client.js'),options: ${options}}`;
  32. }
  33. function initPlugins(configPlugin) {
  34. configPlugin = require('../config.json').plugins;
  35. var systemConfigPlugin = require('./common/config.js').exts;
  36. var scripts = [];
  37. if (configPlugin && Array.isArray(configPlugin) && configPlugin.length) {
  38. configPlugin = commonLib.initPlugins(configPlugin, 'plugin');
  39. configPlugin.forEach(plugin => {
  40. if (plugin.client && plugin.enable) {
  41. scripts.push(createScript(plugin, 'node_modules'));
  42. }
  43. });
  44. }
  45. systemConfigPlugin = commonLib.initPlugins(systemConfigPlugin, 'ext');
  46. systemConfigPlugin.forEach(plugin => {
  47. if (plugin.client && plugin.enable) {
  48. scripts.push(createScript(plugin, 'exts'));
  49. }
  50. });
  51. scripts = 'module.exports = {' + scripts.join(',') + '}';
  52. fs.writeFileSync('client/plugin-module.js', scripts);
  53. }
  54. initPlugins();
  55. module.exports = {
  56. plugins: [
  57. {
  58. name: 'antd',
  59. options: {
  60. modifyQuery: function(defaultQuery) {
  61. // 可查看和编辑 defaultQuery
  62. defaultQuery.plugins = [];
  63. defaultQuery.plugins.push([
  64. 'transform-runtime',
  65. {
  66. polyfill: false,
  67. regenerator: true
  68. }
  69. ]);
  70. defaultQuery.plugins.push('transform-decorators-legacy');
  71. defaultQuery.plugins.push(['import', { libraryName: 'antd' }]);
  72. return defaultQuery;
  73. },
  74. exclude: isWin ? /(tui-editor|node_modules\\(?!_?(yapi-plugin|json-schema-editor-visual)))/ : /(tui-editor|node_modules\/(?!_?(yapi-plugin|json-schema-editor-visual)))/
  75. }
  76. }
  77. ],
  78. devtool: 'cheap-source-map',
  79. config: function(ykit) {
  80. return {
  81. exports: ['./index.js'],
  82. commonsChunk: {
  83. vendors: {
  84. lib: [
  85. // 'anujs',
  86. 'react',
  87. 'react-dom',
  88. 'redux',
  89. 'redux-promise',
  90. 'react-router',
  91. 'react-router-dom',
  92. 'prop-types',
  93. 'react-dnd-html5-backend',
  94. 'react-dnd',
  95. 'reactabular-table',
  96. 'reactabular-dnd',
  97. 'table-resolver'
  98. ],
  99. lib2: ['brace', 'json5', 'url', 'axios'],
  100. lib3: ['mockjs', 'moment', 'recharts']
  101. }
  102. },
  103. modifyWebpackConfig: function(baseConfig) {
  104. var ENV_PARAMS = {};
  105. switch (this.env) {
  106. case 'local':
  107. ENV_PARAMS = 'dev';
  108. break;
  109. case 'dev':
  110. ENV_PARAMS = 'dev';
  111. break;
  112. case 'prd':
  113. ENV_PARAMS = 'production';
  114. break;
  115. default:
  116. }
  117. baseConfig.plugins.push(
  118. new this.webpack.DefinePlugin({
  119. 'process.env.NODE_ENV': JSON.stringify(ENV_PARAMS),
  120. 'process.env.version': JSON.stringify(package.version),
  121. 'process.env.versionNotify': yapi.WEBCONFIG.versionNotify
  122. })
  123. );
  124. //初始化配置
  125. baseConfig.devtool = 'cheap-module-eval-source-map';
  126. baseConfig.context = path.resolve(__dirname, './client');
  127. baseConfig.resolve.alias.client = '/client';
  128. baseConfig.resolve.alias.common = '/common';
  129. baseConfig.resolve.alias.exts = '/exts';
  130. // baseConfig.resolve.alias.react = 'anujs';
  131. // baseConfig.resolve.alias['react-dom'] = 'anujs';
  132. baseConfig.output.prd.path = 'static/prd';
  133. baseConfig.output.prd.publicPath = '';
  134. baseConfig.output.prd.filename = '[name]@[chunkhash][ext]';
  135. baseConfig.module.noParse = /node_modules\/jsondiffpatch\/public\/build\/.*js/;
  136. baseConfig.module.loaders.push({
  137. test: /\.less$/,
  138. loader: ykit.ExtractTextPlugin.extract(
  139. require.resolve('style-loader'),
  140. require.resolve('css-loader') +
  141. '?sourceMap!' +
  142. require.resolve('less-loader') +
  143. '?sourceMap'
  144. )
  145. });
  146. baseConfig.module.loaders.push({
  147. test: /.(gif|jpg|jpeg|png|woff|woff2|eot|ttf|svg)$/,
  148. loader: 'url-loader',
  149. options: {
  150. limit: 8192,
  151. name: ['[path][name].[ext]?[sha256#base64:8]']
  152. }
  153. });
  154. baseConfig.module.loaders.push({
  155. test: /\.(sass|scss)$/,
  156. loader: ykit.ExtractTextPlugin.extract(
  157. require.resolve('css-loader') +
  158. '?sourceMap!' +
  159. require.resolve('sass-loader') +
  160. '?sourceMap'
  161. )
  162. });
  163. baseConfig.module.preLoaders.push({
  164. test: /\.(js|jsx)$/,
  165. exclude: /tui-editor|node_modules|google-diff.js/,
  166. loader: 'eslint-loader'
  167. });
  168. baseConfig.module.preLoaders.push({
  169. test: /\.json$/,
  170. loader: 'json-loader'
  171. });
  172. if (this.env == 'prd') {
  173. baseConfig.plugins.push(
  174. new this.webpack.optimize.UglifyJsPlugin({
  175. compress: {
  176. warnings: false
  177. }
  178. })
  179. );
  180. baseConfig.plugins.push(assetsPluginInstance);
  181. baseConfig.plugins.push(compressPlugin);
  182. baseConfig.plugins.push(
  183. new this.webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(zh-cn|en-gb)$/)
  184. );
  185. }
  186. return baseConfig;
  187. }
  188. };
  189. },
  190. server: {
  191. // true/false,默认 false,效果相当于 ykit server --hot
  192. hot: true,
  193. // true/false,默认 false,开启后可在当前打开的页面提示打包错误
  194. overlay: false
  195. },
  196. hooks: {},
  197. commands: []
  198. };