将prepublish部分添加到asp.net Core *.csproj文件

3
我在我的asp.net Core MVC项目中使用webpack来打包js/css文件,并将其放置在wwwroot文件夹中。
我的文件夹结构如下所示:

enter image description here

我在FrontEnd.csproj中添加了“after-build”部分:
<Target Name="BuildClientAssets" BeforeTargets="Build">
  <Exec Command="npm install"/>
  <Exec Command="npm run build"/>
</Target>

“FrontEnd/node_modules” 包含通过 “npm install” 命令安装的 npm 模块;
“Web/wwwroot/dist” 和 “Web/wwwroot/fonts” 包含由 “npm run build” 命令生成的捆绑的 js/css/fonts 文件;
它按预期工作。但是,如果我有机会在发布 Web 项目时执行此命令,那就太好了。
但是,当我尝试将 prepublish 部分添加到 Web 项目并开始发布时……
<Target Name="BuildClientAssets" BeforeTargets="Publish">
  <Exec Command="npm install"/>
  <Exec Command="npm run build"/>
</Target>

我得到了这个错误:命令“npm run build”以代码-4058退出 我猜测这是因为package.json位于FrontEnd项目中(而不是Web项目),所以我寻找了一个合适的脚本以正确的方式启动命令,并覆盖了该部分:
<Target Name="BuildClientAssets" BeforeTargets="Publish">
  <Exec Command="npm install" />
  <Exec Command="webpack --config ../FrontEnd/webpack.config.js" />
</Target>

但是当我遇到以下错误时:

无法解析'./src/components/app/file1.ts' 错误:入口模块未找到0

错误:无法解析'./src/components/app/file2.ts'
错误:入口模块未找到0

错误:无法解析'source-map-loader' 模块未找到0

命令已经开始运行,但是模块仍然在 Web 中搜索,而不是在前端项目中。

有任何想法吗?

1个回答

2

npm install也没有进入正确的文件夹,您需要在正确的位置运行这些命令-可能在您的计算机上已经有了node-modules,所以它才能正常工作。您可以保留两个命令(npm install / npm run build)并尝试定位到正确的位置。如何做到这一点?您可以告诉命令他将要运行的文件夹。

首先,在PropertyGroup部分设置前端文件夹的位置。

<FrontRoot>../FrontEnd/</FrontRoot>

并使用WorkingDirectory属性在命令行中传递属性。它看起来像这样:

<Target Name="BuildClientAssets" BeforeTargets="Publish">
  <Exec WorkingDirectory="$(FrontRoot)" Command="npm install"/>
  <Exec WorkingDirectory="$(FrontRoot)" Command="npm run build"/>
</Target>

这里有一个类似的情况 这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接