vue3微信公众号商城项目实战系列(12)项目发布到服务器上(完结篇)

本篇介绍如何将vue3项目打包发布到服务器上,然后在微信公众号上打开。

vue3发布之前需要对项目进行编译,编译时会在项目根目录下创建 dist 文件夹,编译后的文件会存放在这里。

 

编译之前,我们在public目录下建一个 config.js 的文件,代码如下:

const config = {
    baseUrl: "http://api.xxx.com/api", //修改为你的服务器接口地址
}

1. 作用

方便运维同事将编译后的代码部署到web服务器之前可以根据情况修改后端接口API 地址(一般情况下开发API接口和正式API接口是不同的)。

即使部署完成后,后端接口API地址如果有变动(后端写接口API的同事可能也在不定期发布新版本),也很容易通过修改这个文件解决

,而不需要找前端同事重新编译打包一次。

 

2. 为什么放置在这个目录呢?

因为其他目录的文件编译后文件名后面会加一个随机字符串(见下图),而public目录下的文件名会保持不变

运维可以很方便的找到这个文件并修改。

注:public 目录下的文件编译后会自动放到根目录(public目录不存在了),这是 public 和 src/assets 目录不同的地方。

 

3. 如何使用这个配置呢?

这需要代码中能区分开发环境和服务器环境,开发环境会自动读取 vite.config.js 配置文件中 "server" 属性的配置信息

,这里定义了后端接口API地址(一般仅供开发使用),如果vue3项目编译完成部署到服务器环境后

能自动读取 config.js 中的配置信息问题就解决了。这里我们使用vue3的环境配置文件来解决。

第1步:

在 vue3 根目录下新建 ".env.development" 和 ".env.production" 文件,分别对应开发环境配置和生产环境配置

,这里的文件名除了保持 ".env." 的前缀外,后面可以任意取名,但需要到package.json中的"scripts"属性下去增加配置以便和新名称对应

,development 和 production 是预设的名称,不需要额外设置,直接使用就可以了,如下:

第2步:

在这个2个文件中分别加入如下的代码

.env.development

VITE_APP_ENV = 'development'

VITE_APP_BASE_URL = '/dev-api'

.env.production

VITE_APP_ENV = 'production'

VITE_APP_BASE_URL = '/prod-api'

注意:按VITE的约定变量名称必须以 "VITE_" 开头

,如果要修改这个约定的前缀需要到 vite.config.js文件的 defineConfig() 函数中加上envPrefix : “XXX_” 的配置,这里遵守约定去使用就可以了。

用 import.meta.env.VITE_APP_ENV 就可以取到相应的值,当用npm run dev命令在本机运行时vue3框架会读取.env.development中的值

,当build后,则去读取.env.production中的值。

 

第3步:

修改 request.js 中 baseURL 的取值方式,如下:

//配置默认的Content-Type格式
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.baseURL = import.meta.env.VITE_APP_ENV === "development" ? import.meta.env.VITE_APP_BASE_URL : config.baseUrl;
//创建axios实例
const service = axios.create({   
    timeout: 60*1000, //请求超时时间60秒
    baseURL: '/dev-api',
})

之前的baseURL是写死的,现在将其从axios.create() 方法中提取出来进行全局配置,判断当前环境变量 import.meta.env.VITE_APP_ENV 是否是开发环境

,如果是,读取 import.meta.env.VITE_APP_BASE_URL的值为"/dev-api",如果不是,就从外部的 config.js 中读取 baseUrl 属性值。

 

第4步(最后一步):

在 index.html 文件中增加对 config.js的 script 引用,以便 request.js 中使用"config.baseUrl"时可以取到值,如下(见12行):

 1 <!DOCTYPE html>
 2 <html lang="en">
 3   <head>
 4     <meta charset="UTF-8">
 5     <link rel="icon" href="/favicon.ico">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <title>Vite App</title>
 8   </head>
 9   <body>
10     <div id="app"></div>
11     <script type="module" src="/src/main.js"></script>
12     <script type="text/javascript" src="/config.js"></script>
13   </body>
14 </html>

至此,整个编译发布前的准备工作就完成了。

 --------------------------------------------------------------------------------------------------------

编译前的文件:

在命令行窗口输入指令: npm run build 后回车,项目开始编译,如下:

编译完成:

用时不到1秒,速度还是非常快的。

编译完成后项目的根目录下就多了一个dist的目录,内容如下:

assets 中就是编译后的所有文件了,如下:

注:因为public 下的文件编译后会放在dist根目录,dist 文件夹有点凌乱,

,建一个 imgs 的文件夹来集中存放图片更好一些,新建imgs目录并将图片剪切过去,重新编译如下:

 

编译报错,vue3 能自动检测图片的引用地址是否正确,根据错误提示把引用不到的图片路径修改后重新编译:

在dist目录也清爽了,如下:

把文件copy到服务器的相关目录,就可以通过 http://mall.xxx.com 访问了。

--------------------------------------------------------------------------------------------------

关联微信公众号:

在商城中,不同页面有不同访问地址

,比如 首页:http://mall.xxx.com/home,购物车:http://mall.xxx.com/cart,我的:http://mall.xxx.com/mine等,

我们只要在微信公众号后台添加相应的菜单,然后指向这些地址就可以了,发布之后,在微信的公众号底部菜单可以访问,如下:

(完结)

 

posted @ 2023-04-20 12:02  屏风马  阅读(676)  评论(0编辑  收藏  举报