0


手写一个服务器代码将 《vue电商后台管理系统》部署上去 上线、打包

我将在博文中全程以cnpm作为代码格式,为了好复制,它啊!你要知道node安装包自带npm,npm下载cnpm才可以使用cnpm

今日目标:

1.上线vue电商后台管理项目

2.手写搭建服务器并挂载 (node)

3.打包优化 完成上线

前期回顾

终于有人能把 服务器 说的这么直白了_活在风浪里的博客-CSDN博客十多万字超详细的电商后台管理系统Vue项目,从零开始,包括后面的打包上线优化,挂载到服务器上如何操作,看后定会收获颇多 !https://blog.csdn.net/m0_57904695/article/details/122938095

介绍:

这是我写的后台管理项目,今日就是操作它(15万字详细教程)我给它贴上来,如果只看打包部署上线,亲往下快进

结合 服务器+后端+前端,完成 vue项目 后台管理系统_活在风浪里的博客-CSDN博客亲测可用 gitee 网址 包括php包,后端node.js代码,前端源码 以及文档接口说明 + 结合 服务器+后端+前端,完成 vue项目 后台管理系统https://blog.csdn.net/m0_57904695/article/details/122648464?spm=1001.2014.3001.5502再此之前我写过一篇部署nginx,从写代码达到手机App极为细致,看后定收获颇多!主要是vant、手机端

一步一步,一步 从代码到,打包成为手机App,上传至nginx服务器 (Vue项目)_活在风浪里的博客-CSDN博客一步一步,一步 从代码到,打包成为手机App,上传至ngnix服务器 (Vue项目)https://blog.csdn.net/m0_57904695/article/details/122500485?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164506544716780265430357%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164506544716780265430357&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-122500485.nonecase&utm_term=%E4%B8%8A%E7%BA%BF&spm=1018.2226.3001.4450


首次打包查看包体积 (7.09MB)

vue.config.js

  • 没有就新建一个,vue.config.js解释:就是修改webpack 的默认配置项

重要!! 1-17步骤通过ctrl+f 搜索步骤,在代码注释里有下载依赖的命令,要下载依赖的,下面是代码,必须下载依赖才能用

  1. // 1-17步骤
  2. // 3 加载path模块和定义resolve方法, 把相对路径转换成绝对路径
  3. const path = require('path')
  4. const resolve = dir => path.join(__dirname, dir)
  5. // 5 安装去除log包 cnpm install uglifyjs-webpack-plugin --save-dev
  6. //6引入去除log文件
  7. const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
  8. const isProduction = process.env.NODE_ENV === 'production';
  9. // 13 对资源文件进行压缩引入
  10. const CompressionWebpackPlugin = require('compression-webpack-plugin')
  11. // 8 使用externals设置排除项
  12. const externals = {
  13. //这里如果写的不对,dist/index打开会报xx未定义,
  14. // 模块名称和作用域名(对应的是window里面的全局变量名)
  15. // 模块名称和作用域名一定要写对,不然不是报未定义就是打包cdn引入不进去 !!!
  16. vue: 'Vue',
  17. "element-ui": "element",
  18. 'vue-router': 'VueRouter',
  19. axios: 'axios',
  20. lodash: '_',
  21. echarts: 'echarts',
  22. nprogress: 'NProgress',
  23. 'vue-quill-editor': 'VueQuillEditor',
  24. }
  25. // CDN外链,会插入到index.html中
  26. const cdn = {
  27. // 开发环境
  28. dev: {
  29. css: [],
  30. js: []
  31. },
  32. // 生产环境
  33. build: {
  34. // element在vue下,顺序不对也会报错
  35. css: [
  36. "https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css",
  37. 'https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css',
  38. 'https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css',
  39. 'https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css',
  40. 'https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css',
  41. ],
  42. js: [
  43. "https://cdn.staticfile.org/vue/2.5.22/vue.min.js",
  44. "https://cdn.staticfile.org/element-ui/2.8.2/index.js",
  45. "https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js",
  46. "https://cdn.staticfile.org/axios/0.18.0/axios.min.js",
  47. "https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js",
  48. "https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js",
  49. "https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js",
  50. "https://cdn.staticfile.org/quill/1.3.4/quill.min.js",
  51. "https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js",
  52. ]
  53. }
  54. }
  55. module.exports = {
  56. // 1
  57. publicPath: './', // 静态资源路径(默认/,打包后会白屏)
  58. // 2
  59. productionSourceMap: false, //错误映射,关闭会减少一半体积
  60. devServer: {
  61. hotOnly: true, // 热更新
  62. open: true
  63. },
  64. // 4 添加别名
  65. chainWebpack: config => {
  66. config.resolve.alias
  67. .set('@', resolve('src'))
  68. .set('assets', resolve('src/assets'))
  69. .set('api', resolve('src/api'))
  70. .set('views', resolve('src/views'))
  71. .set('components', resolve('src/components'))
  72. // 10 添加CDN参数到htmlWebpackPlugin配置中
  73. // 11 在pubilc/index 中配置 我放在最下面了
  74. // 12 cnpm i compression-webpack-plugin -D 对资源文件进行压缩
  75. config.plugin('html').tap(args => {
  76. if (isProduction) {
  77. args[0].cdn = cdn.build
  78. } else {
  79. args[0].cdn = cdn.dev
  80. }
  81. return args
  82. })
  83. // 16 配置图片压缩
  84. config.module
  85. .rule('images')
  86. .use('image-webpack-loader')
  87. .loader('image-webpack-loader')
  88. .options({
  89. bypassOnDebug: true
  90. })
  91. .end()
  92. },
  93. // 7 使用去除log
  94. configureWebpack: config => {
  95. const plugins = [];
  96. if (isProduction) {
  97. // 9 配置cdn
  98. config.externals = externals
  99. // 配置cdn
  100. plugins.push(
  101. new UglifyJsPlugin({
  102. uglifyOptions: {
  103. output: {
  104. comments: false, // 去掉注释
  105. },
  106. warnings: false,
  107. compress: {
  108. drop_console: true,
  109. drop_debugger: false,
  110. pure_funcs: ['console.log'] //移除console
  111. }
  112. }
  113. }),
  114. // 14 对资源文件进行压缩引入进行配置:
  115. new CompressionWebpackPlugin({
  116. filename: '[path].gz[query]',
  117. algorithm: 'gzip',
  118. // test: /\.js$|\.html$|\.json$|\.css/,
  119. test: /\.js$|\.json$|\.css/,
  120. threshold: 10240, // 只有大小大于该值的资源会被处理
  121. minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
  122. // deleteOriginalAssets: true // 删除原文件
  123. })
  124. // 15 安装图片压缩 cnpm install image-webpack-loader --save-dev 容易安装不上
  125. // 若安装过 image-webpack-loader 先卸载 !!!
  126. // npm 安装的npm 则npm 移除
  127. // npm uninstall image - webpack - loader
  128. //如果yarn安装的,则yarn 移除
  129. // yarn remove image - webpack - loader
  130. ),
  131. // 17公共代码抽离
  132. config.optimization = {
  133. splitChunks: { // 分割代码块
  134. cacheGroups: {
  135. vendor: { //第三方库抽离
  136. chunks: 'all',
  137. test: /node_modules/,
  138. name: 'vendor',
  139. minChunks: 1, //在分割之前,这个代码块最小应该被引用的次数
  140. maxInitialRequests: 5,
  141. minSize: 0, //大于0个字节
  142. priority: 100 //权重
  143. },
  144. common: { //公用模块抽离
  145. chunks: 'all',
  146. test: /[\\/]src[\\/]js[\\/]/,
  147. name: 'common',
  148. minChunks: 2, // 在分割之前, 这个代码块最小应该被引用的次数
  149. maxInitialRequests: 5,
  150. minSize: 0, //大于0个字节
  151. priority: 60
  152. },
  153. styles: { //样式抽离
  154. name: 'styles',
  155. test: /\.(sa|sc|c)ss$/,
  156. chunks: 'all',
  157. enforce: true
  158. },
  159. runtimeChunk: {
  160. name: 'manifest'
  161. }
  162. }
  163. }
  164. }
  165. }
  166. },
  167. }

重要!!! 将以上代码赋值到 vue.config.js文件中,根据自己的项目去配置cdn

图例:

可以根据自己项目所需的cdn链接自己搜索配置 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务

本项目所需的cdn

  1. <!-- nprogress 的样式表文件 -->
  2. <link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />
  3. <!-- 富文本编辑器 的样式表文件 -->
  4. <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" />
  5. <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css" />
  6. <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css" />
  7. <!-- element-ui 的样式表文件 -->
  8. <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css" />
  9. <script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script>
  10. <script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script>
  11. <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
  12. <script src="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script>
  13. <script src="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script>
  14. <script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
  15. <!-- 富文本编辑器的 js 文件 -->
  16. <script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script>
  17. <script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script>
  18. <!-- element-ui 的 js 文件 -->
  19. <script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>

cdn配置好后,在public/index.html添加如下代码

  1. <!-- 使用CDN的CSS文件 -->
  2. <% for (var i in
  3. htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
  4. <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" />
  5. <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" />
  6. <% } %>
  7. <!-- 使用CDN加速的JS文件,配置在vue.config.js下 -->
  8. <% for (var i in
  9. htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
  10. <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
  11. <% } %>

需要配置环境变量,上线网址,运行npm run build 就是生产环境上线环境了,所以需要配置上线的网址, 下面第三张图

配置环境变量: 参考Vue配置多环境变量,原来是这么回事啊_活在风浪里的博客-CSDN博客https://blog.csdn.net/m0_57904695/article/details/122269218


可以通过在build后加上 --report查看打包报告

  1. // package.json
  2. "scripts": {
  3. "serve": "vue-cli-service serve --open",
  4. "build": "vue-cli-service build --report"
  5. },

到现在已经配置好了,我们在重新运行打包命令,查看dist文件大小

打包完成后要这个打包报告就没用了可以删除掉,

项目上线

通过node创建服务器,自己写一个简单服务器

1:在根目录创建一个文件夹server cd 进入sever目录

2: 输入命令**

  1. npm init -y

  1. 一路回车 初始化得到

  1. package.json

**

3:初始化包之后,输入命令**c

  1. **n**pm i express -S下载依赖

**

4:复制**

  1. dist

文件夹,粘贴到

  1. server

**中

5:**

  1. server

文件夹中创建

  1. app.js

**文件,编写代码如下

  1. //学过node都知道,只是导入express,我们刚才下载好了
  2. const express = require('express')
  3. // 将方法赋值给app
  4. const app = express()
  5. //使用中间件加载静态资源./dist,我们需要将dist粘贴到同级目录
  6. app.use(express.static('./dist'))
  7. //监听端口8888,端口号随你写建议在3000以上不予默认端口冲突,就类似酒店的房门号,你我
  8. //都是汉子可不能住一间,
  9. app.listen(8888,()=>{
  10. console.log("服务器成功运行")
  11. })

6:在终端中输入 **

  1. node app.js 运行服务器

**

效果图:


我自己在浏览器url输入:http://localhost:8888/ 你要访问需要我俩在同一局域网,输入我电脑ip:端口号 如下图:

这样就部署在我们自己写的服务器了,你输入我的电脑id和端口,我们在同一局域网你也可以访问这个项目了,这是我的电脑充当了服务器,不过要一直开着终端,可以借用插件,开一个进程,这样我关闭终端,你依旧可以访问项目

使用pm2管理应用开启进程

打开server文件夹的终端,输入命令:cnpm i pm2 -g
使用pm2启动项目,在终端中输入命令:pm2 start app.js --name 自定义名称
查看项目列表命令:pm2 ls
重启项目:pm2 restart 自定义名称
停止项目:pm2 stop 自定义名称
删除项目:pm2 delete自定义名称

开启gzip压缩

打开

  1. server

文件夹的终端,输入命令:**c

  1. npm i compression -D

**
打开app.js,编写代码:

  1. //学过node都知道,只是导入express,我们刚才下载好了
  2. const express = require('express')
  3. const compression = require('compression')
  4. // 将方法赋值给app
  5. const app = express()
  6. app.use(compression())
  7. //使用中间件加载静态资源./dist,我们需要将dist粘贴到同级目录
  8. app.use(express.static('./dist'))
  9. //监听端口8888,端口号随你写建议在3000以上不予默认端口冲突,就类似酒店的房门号,你我
  10. //都是汉子可不能住一间,
  11. app.listen(8888, () => {
  12. console.log("服务器成功运行")
  13. })

此时已成功将项目打包并部署服务器了,

结语:

希望大家都能好好的,没有加不完的班,修不完bug

标签: vue.js 服务器 npm

本文转载自: https://blog.csdn.net/m0_57904695/article/details/122977868
版权归原作者 0.活在风浪里 所有, 如有侵权,请联系我们删除。

“手写一个服务器代码将 《vue电商后台管理系统》部署上去 上线、打包”的评论:

还没有评论