前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NetCore项目发布对前端项目进行打包合并发布

NetCore项目发布对前端项目进行打包合并发布

作者头像
旺财的城堡
发布2021-01-21 18:01:50
1.3K0
发布2021-01-21 18:01:50
举报
文章被收录于专栏:calvincalvin

在某个小项目中, 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配置

代码语言:javascript
复制
//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 上去.

代码语言:javascript
复制
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 下加入如下配置

代码语言:javascript
复制
	<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到这里了.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Api项目的配置更改点:
    • Startup增加SPA配置
    • Vuejs项目的变动
      • 在项目文件夹中增加npm的build任务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档