Webpack,asp.net核心,docker:使用dotnet调试或发布版本构建webpack

时间:2016-11-14 15:43:30

标签: docker build webpack .net-core

我有一个asp.net核心应用程序,类似于aspnetcore-spa提供的。 Webpack已设置为--env.prod--env.dev,并通过JavaScriptServices集成。

从Visual Studio 2015构建和运行应用程序似乎工作正常*。使用Development环境的调试版本在Kestrel上正常运行 - webpack中间件(重新)构建客户端应用程序并且热模块替换效果很好(虽然有点慢 - 很可能是由于它必须复制的硬编码引用资产)。

*但是,从不重建供应商包,也不会运行--env.prod webpack构建。我认为这一切都有效(即使在示例中)仅仅因为文件的一个版本被提交到存储库。

运行dotnet rundotnet build是不够的,因为这不会触及webpack。我可以在package.json为此提供一些脚本,我不知道如何(或者如果)我可以将它嵌入到Visual Studio的构建中 - 而且,使用npm代替我感觉有点脏直接dotnet

这整个问题也与我构建可调试的docker镜像的问题有关。我想我可以在容器中运行webpack并复制所有来源 - 但这仍然留下了问题:

如何将webpack构建集成到Visual Studio中(甚至更好,dotnet)?

1 个答案:

答案 0 :(得分:0)

我们已通过流程解决了这个问题,并使用npm脚本

  • 构建,部署等通过npm脚本处理
  • 每当有人签出分支,提交提交或添加新的供应商依赖关系时,它们都会运行npm run build-webpack-dev-vendor,这是一个运行npm-run webpack --env.dev --config ./config/webpack.config.vendor.js
  • 的npm脚本
  • Docker构建也是从npm脚本运行的

webpack的构建输出放入wwwroot目录,其整个内容被gitignored(.gitignore除外)。

Webpack脚本

这些脚本用于任何或所有webpack构建。

"build-webpack-dev": "npm run build-webpack-dev-vendor && npm run build-webpack-dev-app",
"build-webpack-dev-vendor": "npm-run webpack --config ./config/webpack.config.vendor.js --env.dev",
"build-webpack-dev-app": "npm-run webpack --env.dev --display-modules",
"build-webpack-prod": "npm run build-webpack-prod-vendor && npm run build-webpack-prod-app",
"build-webpack-prod-vendor": "npm-run webpack --config ./config/webpack.config.vendor.js --env.prod",
"build-webpack-prod-app": "npm-run webpack --env.prod --display-modules",

我们的配置无法识别prod和dev供应商构建。 注意:需要安装npm-run

Docker脚本

这些脚本用于构建和发布我们的docker镜像。 我们有 fast 脚本的变体,可以加快发布速度(无需重建,无需额外登录)。

"docker-build-prod": "dotnet publish --configuration Release && docker build bin\\Release\\netcoreapp1.1\\publish -t company/product:tag --no-cache",
"docker-publish-prod": "npm run docker-build-prod && docker login && docker push company/product:tag",
"docker-publish-prod-fast": "docker push company/product:tag",
"docker-login": "docker login",

开发人员应该检查构建输出,如果应用程序中有任何捆绑包应该移动到供应商捆绑包(因此在webpack构建中使用--display-modules)。< / p>

补充脚本

最后,并非我们团队中的每个人都使用Visual Studio(例如设计师)。我们为它们提供了脚本和一些更通用的脚本。 fast 变体跳过npm install,构建供应商包并恢复nuget包。

"start-dev": "npm install && npm run build-webpack-dev && dotnet restore && dotnet run --configuration Debug --environment \"Development\"",
"start-dev-fast": "dotnet run --configuration Debug --environment \"Development\"",
"start-prod": "npm install && npm run build-webpack-prod && dotnet restore && dotnet run --configuration Release --environment \"Production\"",
"start-prod-fast": "npm run build-webpack-prod-app && dotnet run --configuration Release --environment \"Production\"",

最后,为了好的措施

"refresh": "npm install && dotnet restore"

我希望有帮助,我愿意就如何改善这一点提出建议:)