webpack.dev.conf.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. "use strict";
  2. const path = require("path");
  3. const utils = require("./utils");
  4. const webpack = require("webpack");
  5. const config = require("../config");
  6. const merge = require("webpack-merge");
  7. const baseWebpackConfig = require("./webpack.base.conf");
  8. const CopyWebpackPlugin = require("copy-webpack-plugin");
  9. const HtmlWebpackPlugin = require("html-webpack-plugin");
  10. const FriendlyErrorsPlugin = require("friendly-errors-webpack-plugin");
  11. const portfinder = require("portfinder");
  12. const ip = require("ip");
  13. const devConfig = require("../config/dev.env");
  14. const uiPackageJson = require("ui-component-v4/package");
  15. let commonPackageJson;
  16. if (devConfig.IS_BASE_PACKAGE === true + "") {
  17. commonPackageJson = require("ui-jz-v4-common/package");
  18. }
  19. function resolve(dir) {
  20. return path.join(__dirname, "..", dir);
  21. }
  22. const HOST = process.env.HOST;
  23. const PORT = process.env.PORT && Number(process.env.PORT);
  24. const devWebpackConfig = merge(baseWebpackConfig, {
  25. mode: "development",
  26. module: {
  27. rules: utils.styleLoaders({
  28. sourceMap: config.dev.cssSourceMap,
  29. usePostCSS: true
  30. })
  31. },
  32. // cheap-module-eval-source-map is faster for development
  33. devtool: config.dev.devtool,
  34. // these devServer options should be customized in /config/index.js
  35. devServer: {
  36. clientLogLevel: "warning",
  37. historyApiFallback: true,
  38. disableHostCheck: true,
  39. hot: true,
  40. compress: true,
  41. host: HOST || config.dev.host,
  42. port: PORT || config.dev.port,
  43. open: config.dev.autoOpenBrowser,
  44. overlay: config.dev.errorOverlay ? { warnings: false, errors: true } : false,
  45. publicPath: config.dev.assetsPublicPath,
  46. proxy: config.dev.proxyTable,
  47. quiet: true, // necessary for FriendlyErrorsPlugin
  48. watchOptions: {
  49. poll: config.dev.poll
  50. }
  51. },
  52. plugins: [
  53. new webpack.DefinePlugin({
  54. "process.env": require("../config/dev.env")
  55. }),
  56. new webpack.HotModuleReplacementPlugin(),
  57. new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
  58. new webpack.NoEmitOnErrorsPlugin(),
  59. // https://github.com/ampedandwired/html-webpack-plugin
  60. new HtmlWebpackPlugin({
  61. filename: "index.html",
  62. template: "index.html",
  63. inject: true,
  64. favicon: resolve("favicon.ico"),
  65. title: "ui-jz-v4",
  66. templateParameters: {
  67. BASE_URL: config.dev.assetsPublicPath + config.dev.assetsSubDirectory
  68. }
  69. }),
  70. // copy custom static assets
  71. new CopyWebpackPlugin([
  72. {
  73. from: path.resolve(__dirname, "../static"),
  74. to: config.dev.assetsSubDirectory,
  75. ignore: [".*"]
  76. }
  77. ])
  78. ]
  79. });
  80. module.exports = new Promise((resolve, reject) => {
  81. portfinder.basePort = process.env.PORT || config.dev.port;
  82. portfinder.getPort((err, port) => {
  83. if (err) {
  84. reject(err);
  85. } else {
  86. // publish the new Port, necessary for e2e tests
  87. process.env.PORT = port;
  88. // add port to devServer config
  89. devWebpackConfig.devServer.port = port;
  90. let messages = [
  91. ` App running at:`,
  92. ` - Local: http://localhost:${port}`,
  93. ` - Network: http://${ip.address()}:${port}`,
  94. ` ui-component-v4 version is ${uiPackageJson.version}`
  95. ];
  96. if (devConfig.IS_BASE_PACKAGE === true + "") {
  97. messages.push(` ui-jz-v4 version is ${commonPackageJson.version}`);
  98. }
  99. if (devConfig.PROXY_TABLE) {
  100. const address = [` Back end access address:`]
  101. const proxy = JSON.parse(devConfig.PROXY_TABLE)
  102. for (let key in proxy) {
  103. address.push(` proxy: ${key}, target: ${proxy[key].target}`)
  104. }
  105. messages.push(address.join('\n'))
  106. }
  107. // Add FriendlyErrorsPlugin
  108. devWebpackConfig.plugins.push(
  109. new FriendlyErrorsPlugin({
  110. compilationSuccessInfo: {
  111. messages: messages
  112. },
  113. onErrors: config.dev.notifyOnErrors ? utils.createNotifierCallback() : undefined
  114. })
  115. );
  116. resolve(devWebpackConfig);
  117. }
  118. });
  119. });