张恒

更新依赖,添加端口自适应

...@@ -9,6 +9,7 @@ const config = require('../config') ...@@ -9,6 +9,7 @@ const config = require('../config')
9 const webpack = require('webpack') 9 const webpack = require('webpack')
10 const WebpackDevServer = require('webpack-dev-server') 10 const WebpackDevServer = require('webpack-dev-server')
11 const webpackHotMiddleware = require('webpack-hot-middleware') 11 const webpackHotMiddleware = require('webpack-hot-middleware')
12 +const Portfinder = require("portfinder")
12 13
13 const mainConfig = require('./webpack.main.config') 14 const mainConfig = require('./webpack.main.config')
14 const rendererConfig = require('./webpack.renderer.config') 15 const rendererConfig = require('./webpack.renderer.config')
...@@ -60,40 +61,50 @@ function removeJunk(chunk) { ...@@ -60,40 +61,50 @@ function removeJunk(chunk) {
60 } 61 }
61 62
62 function startRenderer() { 63 function startRenderer() {
63 - return new Promise((resolve) => { 64 + return new Promise((resolve, reject) => {
64 rendererConfig.mode = 'development' 65 rendererConfig.mode = 'development'
65 - const compiler = webpack(rendererConfig) 66 + Portfinder.basePort = config.dev.port || 9080
66 - hotMiddleware = webpackHotMiddleware(compiler, { 67 + Portfinder.getPort((err, port) => {
67 - log: false, 68 + if (err) {
68 - heartbeat: 2500 69 + reject("PortError:" + err)
69 - }) 70 + } else {
70 - 71 + const compiler = webpack(rendererConfig)
71 - compiler.hooks.compilation.tap('compilation', compilation => { 72 + hotMiddleware = webpackHotMiddleware(compiler, {
72 - compilation.hooks.htmlWebpackPluginAfterEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => { 73 + log: false,
73 - hotMiddleware.publish({ action: 'reload' }) 74 + heartbeat: 2500
74 - cb() 75 + })
75 - }) 76 +
76 - }) 77 + compiler.hooks.compilation.tap('compilation', compilation => {
77 - 78 + compilation.hooks.htmlWebpackPluginAfterEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
78 - compiler.hooks.done.tap('done', stats => { 79 + hotMiddleware.publish({ action: 'reload' })
79 - logStats('Renderer', stats) 80 + cb()
80 - })
81 -
82 - const server = new WebpackDevServer(
83 - compiler,
84 - {
85 - contentBase: path.join(__dirname, '../'),
86 - quiet: true,
87 - before(app, ctx) {
88 - app.use(hotMiddleware)
89 - ctx.middleware.waitUntilValid(() => {
90 - resolve()
91 }) 81 })
92 - } 82 + })
83 +
84 + compiler.hooks.done.tap('done', stats => {
85 + logStats('Renderer', stats)
86 + })
87 +
88 + const server = new WebpackDevServer(
89 + compiler,
90 + {
91 + contentBase: path.join(__dirname, '../'),
92 + quiet: true,
93 + before(app, ctx) {
94 + app.use(hotMiddleware)
95 + ctx.middleware.waitUntilValid(() => {
96 + resolve()
97 + })
98 + }
99 + }
100 + )
101 +
102 + process.env.PORT = port
103 + server.listen(port)
104 +
93 } 105 }
94 - ) 106 + })
95 107
96 - server.listen(9080)
97 }) 108 })
98 } 109 }
99 110
...@@ -197,16 +208,15 @@ function greeting() { ...@@ -197,16 +208,15 @@ function greeting() {
197 console.log(chalk.blue(' getting ready...') + '\n') 208 console.log(chalk.blue(' getting ready...') + '\n')
198 } 209 }
199 210
200 -function init() { 211 +async function init() {
201 greeting() 212 greeting()
202 - 213 + try {
203 - Promise.all([startRenderer(), startMain()]) 214 + await startRenderer()
204 - .then(() => { 215 + await startMain()
205 - startElectron() 216 + await startElectron()
206 - }) 217 + } catch (error) {
207 - .catch(err => { 218 + console.error(error)
208 - console.error(err) 219 + }
209 - })
210 } 220 }
211 221
212 init() 222 init()
......
...@@ -42,6 +42,7 @@ npm config edit ...@@ -42,6 +42,7 @@ npm config edit
42 这是花裤衩大大原本的[地址](https://github.com/PanJiaChen/electron-vue-admin) 42 这是花裤衩大大原本的[地址](https://github.com/PanJiaChen/electron-vue-admin)
43 43
44 # 更新日志 44 # 更新日志
45 +- 2020年01月09日更新:例行更新依赖,在dev中加入了端口监听检测,如果9080端口被占用就会自动向后开启一个端口号并使用,同时在config/index.js的dev中加入了端口设置,可以快捷设置端口号而不用去更改webpack的配置了。
45 - 2019年12月18日更新:我在build文件夹内添加了windows的打包依赖,在打包爆错的话,可以尝试使用/build/lib内的压缩包,记得看使用说明哦~ 46 - 2019年12月18日更新:我在build文件夹内添加了windows的打包依赖,在打包爆错的话,可以尝试使用/build/lib内的压缩包,记得看使用说明哦~
46 - 2019年11月22日更新:得益于群里老哥的提醒,通过修改系统环境变量得到了通过yarn下载electron失败的问题,具体操作如下:用户环境变量中新增两个个变量,一个是变量名为`ELECTRON_MIRROR`,变量值为`https://npm.taobao.org/mirrors/electron/`,另一个是变量名为`registry`,变量值为`https://registry.npm.taobao.org/`,然后系统变量中同样也加上这两个值,完成之后,删除node_module文件夹。然后执行yarn install,如果还是提示未安装,那就去electron文件夹内执行一次yarn install,就好了。这样的话,不仅仅只是yarn更快了,electron的rebuild也会加速很多。所以推荐使用yarn。 47 - 2019年11月22日更新:得益于群里老哥的提醒,通过修改系统环境变量得到了通过yarn下载electron失败的问题,具体操作如下:用户环境变量中新增两个个变量,一个是变量名为`ELECTRON_MIRROR`,变量值为`https://npm.taobao.org/mirrors/electron/`,另一个是变量名为`registry`,变量值为`https://registry.npm.taobao.org/`,然后系统变量中同样也加上这两个值,完成之后,删除node_module文件夹。然后执行yarn install,如果还是提示未安装,那就去electron文件夹内执行一次yarn install,就好了。这样的话,不仅仅只是yarn更快了,electron的rebuild也会加速很多。所以推荐使用yarn。
47 (优先尝试)使用npm config edit打开npm配置文件,添加上electron_mirror=https://cdn.npm.taobao.org/dist/electron/ ,然后重启窗口删除node_module文件夹,重新安装依赖即可。 48 (优先尝试)使用npm config edit打开npm配置文件,添加上electron_mirror=https://cdn.npm.taobao.org/dist/electron/ ,然后重启窗口删除node_module文件夹,重新安装依赖即可。
......
...@@ -5,7 +5,8 @@ module.exports = { ...@@ -5,7 +5,8 @@ module.exports = {
5 }, 5 },
6 dev: { 6 dev: {
7 env: require('./dev.env'), 7 env: require('./dev.env'),
8 - removeElectronJunk: true 8 + removeElectronJunk: true,
9 + port: 9080
9 }, 10 },
10 UseStartupChart: true, 11 UseStartupChart: true,
11 IsUseSysTitle: true 12 IsUseSysTitle: true
......
...@@ -2249,12 +2249,11 @@ ...@@ -2249,12 +2249,11 @@
2249 "dev": true 2249 "dev": true
2250 }, 2250 },
2251 "axios": { 2251 "axios": {
2252 - "version": "0.19.0", 2252 + "version": "0.19.1",
2253 - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.0.tgz", 2253 + "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.1.tgz",
2254 - "integrity": "sha1-jgm/89kSLhM/e4EByPvdAO09Krg=", 2254 + "integrity": "sha1-imoE7tI9/nJ0fh3UPGBLjxZ3tao=",
2255 "requires": { 2255 "requires": {
2256 - "follow-redirects": "1.5.10", 2256 + "follow-redirects": "1.5.10"
2257 - "is-buffer": "^2.0.2"
2258 } 2257 }
2259 }, 2258 },
2260 "babel-code-frame": { 2259 "babel-code-frame": {
...@@ -4279,9 +4278,9 @@ ...@@ -4279,9 +4278,9 @@
4279 } 4278 }
4280 }, 4279 },
4281 "date-fns": { 4280 "date-fns": {
4282 - "version": "2.8.1", 4281 + "version": "2.9.0",
4283 - "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.8.1.tgz", 4282 + "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.9.0.tgz",
4284 - "integrity": "sha1-IQk2LMtsh8PKAR6eMfcCvAnkEjs=" 4283 + "integrity": "sha1-0LF1pcN+1fF7l+InK7wfpa7Gd9I="
4285 }, 4284 },
4286 "de-indent": { 4285 "de-indent": {
4287 "version": "1.0.2", 4286 "version": "1.0.2",
...@@ -4804,9 +4803,9 @@ ...@@ -4804,9 +4803,9 @@
4804 "dev": true 4803 "dev": true
4805 }, 4804 },
4806 "electron": { 4805 "electron": {
4807 - "version": "7.1.7", 4806 + "version": "7.1.8",
4808 - "resolved": "https://registry.npm.taobao.org/electron/download/electron-7.1.7.tgz?cache=0&sync_timestamp=1576790381475&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron%2Fdownload%2Felectron-7.1.7.tgz", 4807 + "resolved": "https://registry.npm.taobao.org/electron/download/electron-7.1.8.tgz",
4809 - "integrity": "sha1-Ug4rxCLj39S64WbdO+YhAfLL3FI=", 4808 + "integrity": "sha1-fNUP30LFXJ3oarEm6YPSP9idXZk=",
4810 "dev": true, 4809 "dev": true,
4811 "requires": { 4810 "requires": {
4812 "@electron/get": "^1.0.1", 4811 "@electron/get": "^1.0.1",
...@@ -7139,9 +7138,9 @@ ...@@ -7139,9 +7138,9 @@
7139 }, 7138 },
7140 "dependencies": { 7139 "dependencies": {
7141 "core-js": { 7140 "core-js": {
7142 - "version": "3.6.0", 7141 + "version": "3.6.2",
7143 - "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.0.tgz", 7142 + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.2.tgz?cache=0&sync_timestamp=1578332366962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.2.tgz",
7144 - "integrity": "sha1-K4VORR3hln0eKYlgJc3BOiUY2eo=", 7143 + "integrity": "sha1-J5nqGlkFDwrPUN/om5FtZQOxbKo=",
7145 "dev": true, 7144 "dev": true,
7146 "optional": true 7145 "optional": true
7147 } 7146 }
...@@ -7231,15 +7230,13 @@ ...@@ -7231,15 +7230,13 @@
7231 "dev": true 7230 "dev": true
7232 }, 7231 },
7233 "globalthis": { 7232 "globalthis": {
7234 - "version": "1.0.0", 7233 + "version": "1.0.1",
7235 - "resolved": "https://registry.npm.taobao.org/globalthis/download/globalthis-1.0.0.tgz", 7234 + "resolved": "https://registry.npm.taobao.org/globalthis/download/globalthis-1.0.1.tgz?cache=0&sync_timestamp=1577757201256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobalthis%2Fdownload%2Fglobalthis-1.0.1.tgz",
7236 - "integrity": "sha1-xfuYITqbRZX1nPPnB08UG0Fp2q4=", 7235 + "integrity": "sha1-QBFvXZwHH56PsAN2VN8as6g7fvk=",
7237 "dev": true, 7236 "dev": true,
7238 "optional": true, 7237 "optional": true,
7239 "requires": { 7238 "requires": {
7240 - "define-properties": "^1.1.2", 7239 + "define-properties": "^1.1.3"
7241 - "function-bind": "^1.1.1",
7242 - "object-keys": "^1.0.12"
7243 } 7240 }
7244 }, 7241 },
7245 "globby": { 7242 "globby": {
...@@ -8080,11 +8077,6 @@ ...@@ -8080,11 +8077,6 @@
8080 "binary-extensions": "^1.0.0" 8077 "binary-extensions": "^1.0.0"
8081 } 8078 }
8082 }, 8079 },
8083 - "is-buffer": {
8084 - "version": "2.0.4",
8085 - "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz",
8086 - "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM="
8087 - },
8088 "is-callable": { 8080 "is-callable": {
8089 "version": "1.1.4", 8081 "version": "1.1.4",
8090 "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz", 8082 "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz",
......
...@@ -69,8 +69,8 @@ ...@@ -69,8 +69,8 @@
69 } 69 }
70 }, 70 },
71 "dependencies": { 71 "dependencies": {
72 - "axios": "^0.19.0", 72 + "axios": "^0.19.1",
73 - "date-fns": "^2.8.1", 73 + "date-fns": "^2.9.0",
74 "electron-updater": "^4.2.0", 74 "electron-updater": "^4.2.0",
75 "element-ui": "^2.13.0", 75 "element-ui": "^2.13.0",
76 "fs-extra": "^8.1.0", 76 "fs-extra": "^8.1.0",
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
117 "cross-env": "^6.0.3", 117 "cross-env": "^6.0.3",
118 "css-loader": "^3.4.1", 118 "css-loader": "^3.4.1",
119 "del": "^5.1.0", 119 "del": "^5.1.0",
120 - "electron": "^7.1.7", 120 + "electron": "^7.1.8",
121 "electron-builder": "^21.2.0", 121 "electron-builder": "^21.2.0",
122 "electron-devtools-installer": "^2.2.4", 122 "electron-devtools-installer": "^2.2.4",
123 "eslint": "^6.8.0", 123 "eslint": "^6.8.0",
...@@ -136,6 +136,7 @@ ...@@ -136,6 +136,7 @@
136 "multispinner": "^0.2.1", 136 "multispinner": "^0.2.1",
137 "node-loader": "^0.6.0", 137 "node-loader": "^0.6.0",
138 "node-sass": "^4.13.0", 138 "node-sass": "^4.13.0",
139 + "portfinder": "^1.0.25",
139 "sass-loader": "^8.0.0", 140 "sass-loader": "^8.0.0",
140 "split2": "^3.1.1", 141 "split2": "^3.1.1",
141 "style-loader": "^1.1.2", 142 "style-loader": "^1.1.2",
......
...@@ -16,8 +16,8 @@ if (process.env.NODE_ENV !== 'development') { ...@@ -16,8 +16,8 @@ if (process.env.NODE_ENV !== 'development') {
16 global.__static = path.join(__dirname, '/static').replace(/\\/g, '\\\\') 16 global.__static = path.join(__dirname, '/static').replace(/\\/g, '\\\\')
17 } 17 }
18 // 将文件地址挪到这里 18 // 将文件地址挪到这里
19 -const winURL = process.env.NODE_ENV === 'development' ? 'http://localhost:9080' : `file://${__dirname}/index.html` 19 +const winURL = process.env.NODE_ENV === 'development' ? `http://localhost:${process.env.PORT}` : `file://${__dirname}/index.html`
20 -const loadingURL = process.env.NODE_ENV === 'development' ? 'http://localhost:9080/static/loader.html' : `file://${__static}/loader.html` 20 +const loadingURL = process.env.NODE_ENV === 'development' ? `http://localhost:${process.env.PORT}/static/loader.html` : `file://${__static}/loader.html`
21 var loadWindow = null 21 var loadWindow = null
22 var mainWindow = null 22 var mainWindow = null
23 23
......
...@@ -101,7 +101,7 @@ export default { ...@@ -101,7 +101,7 @@ export default {
101 }, 101 },
102 // 清空数据库的数据 102 // 清空数据库的数据
103 deledata() { 103 deledata() {
104 - // dialog为electron实例,data则是显示需要的参数,fun是需要执行的函数,此选项不是为必选的 104 + // data则是显示需要的参数
105 const data = { 105 const data = {
106 title: "清除数据", 106 title: "清除数据",
107 buttons: ["确定了!", "才不要,我手滑了"], 107 buttons: ["确定了!", "才不要,我手滑了"],
...@@ -130,12 +130,6 @@ export default { ...@@ -130,12 +130,6 @@ export default {
130 }); 130 });
131 } 131 }
132 }); 132 });
133 - // api.MessageBox(dialog, data, fun).then(res => {});
134 - // const data = {
135 - // title:'发生致命错误',
136 - // message:'?'
137 - // }
138 - // api.ErrorMessageBox(dialog,data)
139 }, 133 },
140 CheckUpdate(data) { 134 CheckUpdate(data) {
141 switch (data) { 135 switch (data) {
...@@ -207,7 +201,7 @@ export default { ...@@ -207,7 +201,7 @@ export default {
207 this.$alert("下载由于未知原因被中断!", "提示", { 201 this.$alert("下载由于未知原因被中断!", "提示", {
208 confirmButtonText: "重试", 202 confirmButtonText: "重试",
209 callback: action => { 203 callback: action => {
210 - ipcApi.send("download-restart"); 204 + ipcApi.send("satrt-download");
211 } 205 }
212 }); 206 });
213 } 207 }
......
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
9 </div> 9 </div>
10 <div class="bullshit"> 10 <div class="bullshit">
11 <div class="bullshit__oops">OOPS!</div> 11 <div class="bullshit__oops">OOPS!</div>
12 - <div class="bullshit__info">版权所有<a class="link-type" href="https://wallstreetcn.com" target='_blank'>华尔街见闻</a></div>
13 - <div class="bullshit__headline">{{ message }}</div>
14 <div class="bullshit__info">请检查您输入的网址是否正确,请点击以下按钮返回主页或者发送错误报告</div> 12 <div class="bullshit__info">请检查您输入的网址是否正确,请点击以下按钮返回主页或者发送错误报告</div>
15 <a href="/" class="bullshit__return-home">返回首页</a> 13 <a href="/" class="bullshit__return-home">返回首页</a>
16 </div> 14 </div>
...@@ -28,11 +26,6 @@ export default { ...@@ -28,11 +26,6 @@ export default {
28 img_404, 26 img_404,
29 img_404_cloud 27 img_404_cloud
30 } 28 }
31 - },
32 - computed: {
33 - message() {
34 - return '特朗普说这个页面你不能进......'
35 - }
36 } 29 }
37 } 30 }
38 </script> 31 </script>
......