在某个小项目中, api使用asp.net core 3.x 编写, UI页面则使用Vuejs. 正常情况下, 项目右键的发布只会发布api项目,而不会管Vuejs的项目.

所以通过简单的改造,在发布该项目时不光发布api本身, 同时也编译和发布Vuejs写的页面. 这样子就可以2个项目一起部署了.

当然我们也可以通过CI/CD来解决问题.

项目结构:

*.Manager 是一个asp.net core 3.x的webapi项目, 主要为ui提供接口.

ClientApp 目录下时Vuejs的前端UI项目.

ClientApp\dist 是vuejs在build时的目标文件夹, 记得在.gitignore里面排除,这样vuejs build的产物就不用提交到版本控制了.

Api项目的配置更改点:

Startup增加SPA配置

//Startup.ConfigureServices
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp";
});
//Startup.Configure
app.UseCors(x => x.AllowAnyOrigin().WithMethods("Get", "POST", "PUT", "DELETE", "OPTIONS"));
app.UseSpaStaticFiles();
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
//环境变量可以在我们F5调试运行api项目时控制是否要内嵌启动npm 因为我通常喜欢在vscode里面单独编辑调试启动ui项目, 因为在vscode里面的编辑体验比在vs里面好.
//正常发布后的运行只需要返回index.html即可.
if (bool.TryParse(Environment.GetEnvironmentVariable("StartClient"), out var isStartClient) && isStartClient)
{
if (env.IsDevelopment())
{
//内部启动一个进程运行 npm run serve.
spa.UseVueCli(npmScript: "serve");
}
}
});

Vuejs项目的变动

在开发模式时, 将对api的访问全部proxy到我们的asp.net core api 上去.

module.exports = {
devServer: {
host: '127.0.0.1',
port: 8080,
proxy: {
'/api': {
target: 'http://localhost:5000',
headers: { 'user-agent': 'projectName manager-client webpack proxy' }
}
}
}
}

在项目文件夹中增加npm的build任务

在Manager这个项目的csproj文件中,在Project section 下加入如下配置

	<Target Name="PublishVue" AfterTargets="ComputeFilesToPublish">
<PropertyGroup>
<SpaRoot>ClientApp\</SpaRoot>
</PropertyGroup>
<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
<ItemGroup>
<SpaDistFiles Include="$(SpaRoot)dist\**"></SpaDistFiles>
</ItemGroup>
<Copy SourceFiles="@(SpaDistFiles)" DestinationFiles="@(SpaDistFiles->'$(PublishDir)\$(SpaRoot)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

这样, 在项目上右键点击发布后, 在bin目录就会有一个SpaRoot(ClientApp)的目录,对应的Vuejs的相关文件也都copy到这里了.

NetCore项目发布对前端项目进行打包合并发布的更多相关文章

  1. 内网 Ubuntu 20.04 搭建 docusaurus 项目(或前端项目)的环境(mobaxterm、tigervnc、nfs、node)

    内网 Ubuntu 20.04 搭建 docusaurus 项目(或前端项目)的环境 背景 内网开发机是 win7,只能安装 node 14 以下,而 spug 的文档项目采用的是 Facebook ...

  2. gulp 配置前端项目打包

    项目发布时,需要对项目js文件进行压缩,混淆,连接等操作以减小项目http请求,加快访问. gulpjs.com中有很多插件可以用来配置打包部署. 需要用的常用插件有: gulp-jsmin  压缩j ...

  3. vue打包发布在spingboot项目中 vue-router路由的处理

    (原) 以下例子springboot后端地址为:localhost:7080/pingandai vue前端地址为:locahost:8080/pingandai/ 1.如果路由模式设置的是histo ...

  4. Jenkins结合shell脚本实现(gitLab/gitHub)前端项目自动打包部署服务器

    原始发布部署: 石器时代的我们,先是本地打包好项目,在去服务器上把原来的文件删了,然后回到本地copy到服务器: 这操看起来简单,实际部署的人就知道多烦了,假如来几个项目都要重新发布:那就爽了: 今天 ...

  5. 前端项目模块化的实践2:使用 Webpack 打包基础设施代码

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  6. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  7. AntDeploy发布前端项目到IIS(脱离vs单独使用)

    AntDeploy AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率 1.一键部署iis 2.一键部署windows服务 3.一键部署到Docker 4.支持增 ...

  8. 结合docker发布前端项目(基于npm包管理)的shell脚本

    结合docker发布前端项目(基于npm包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 目前主流的前后端分离的项目中,常常在部署 ...

  9. npm打包前端项目太慢问题分析以及暂时解决方案

    npm build 打包前端项目实际上是执行 node build/build.js,但是随着项目的依赖包越来越多,项目打包时间不断延长,为了改善这个问题,需要从node入手 暂时解决方案:扩大nod ...

  10. 如何使用webpack打包前端项目

    webpack概述 随着前端体积越来越大,功能越来越丰富,这时候就需要将前端工程化,而 webpack就是用于将前端各种文件打包起来. 一个简单的webpack应该包含以下几个概念 · 入口起点 · ...

随机推荐

  1. 新手入门深度学习:在不使用Google的情况下如何在国内获得免费的算力 —— 算力共享,驱动人工智能创新的新引擎

    分享链接地址: 算力获新生 | 算力共享,驱动人工智能创新的新引擎

  2. Apache DolphinScheduler 在奇富科技的首个调度异地部署实践

    奇富科技(原360数科)是人工智能驱动的信贷科技服务平台,致力于凭借智能服务.AI研究及应用.安全科技,赋能金融机构提质增效,助推普惠金融高质量发展,让更多人享受到安全便捷的金融科技服务.作为国内领先 ...

  3. 成为Apache SeaTunnel贡献者的N种方式

    如何参与开源贡献 参与开源贡献的常见方法有多种: 1)参与解答 在社区中, 帮助使用过程中遇到困难的人,帮他们解释框架的用法也算是一种贡献. 2)文档贡献 帮助框架来完善文档,比如说将英文文档翻译为中 ...

  4. 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧

    告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 本文介绍了五种加速在国内访问和下载 GitHub 的方法,包括:使用 Gitee 平台加速克隆代码.修改 hosts 文件.使用油猴 ...

  5. reduce() 多种用法

    reduce()方法用于将数组简化为单一值,通过遍历数组并应用提供的函数.它可以用于求和.乘积.计算对象属性的总和.数组去重和转换数组结构等.初始值的设置会影响reduce的起始索引.不提供初始值时, ...

  6. ai识图测试

    var code = "9392b629-0d84-43ef-9b0f-34740fb024a6"

  7. Java连接MySQL示范

    通过驱动连接mysql数据库,驱动得跟源码在一块,如图 先分析这句 3306 是本地端口 students是要连接的数据库的名字 账号和密码,之前已经设置 接下来分析这个数据库内容: 这个要查的表是 ...

  8. 【VMware VCF】VCF 5.2:配置管理域 vSAN 延伸集群。

    VMware vSAN 解决方案中,根据集群的配置类型分为 vSAN 标准集群.vSAN 延伸集群以及双主机集群(延伸集群特例).我们最常见的使用方式应该是 vSAN 标准集群,也就是 vSAN HC ...

  9. C++性能优化——能用array就不要用unordered_map作为查询表

    unordered_map需要哈希值计算和表查询的开销,当key值为整数且连续,直接用数组作为查询表具有更高的效率. #include <iostream> #include <ch ...

  10. ARC119F 题解

    前言 ARC119F 好厉害,是没见过的自动机 DP. 正文 [1] 分析 主要分析一下为什么这么写. [2] 状态设计 [3] 自动机状态转移 感觉状态设计中最难的就是如何处理带 \(O\) 的. ...