【发布时间】:2016-12-17 11:22:31
【问题描述】:
我有一个 .NET WebAPI 解决方案,以及一个在 Angular2 RC4(angular-cli webpack 版本)中构建的 UI。我对如何将它们部署到不同的环境感到困惑,尤其是配置参数 - .NET 方式和 UI 处理方式之间似乎存在不匹配,我不太明白。
这是我目前在 TeamCity 中获得它的方式。 WebAPI 解决方案仅构建一次,并在部署时配置。项目所需的各种配置参数(如连接字符串、端点等)存储在 web.config 中。当我使用 MSDeploy 部署到我的测试环境时,我将 setParam 参数传递给 MSDeploy 命令行,它将 web.config 中的连接字符串和端点替换为这些值。当我部署到生产环境时,我使用相同的构建,但在命令行中将不同的参数传递给 setParam。
这种方法对我来说很有意义,因为我知道完全相同的构建会从一个环境转移到另一个环境,唯一的区别是我专门告诉它为每个环境设置的参数。超级棒。
对于 Angular2 和 webpack,看起来需要一种不同的方法。当我构建我的项目(使用ng build -prod)时,它会将我的 HTML 和 Javascript 文件以及这些文件的 gzip 压缩版本最小化并捆绑到 3 或 4 个文件中。这对于减小文件大小和提高网站速度非常有用,但是无法像 MSDeploy 的 setParam 那样将配置参数“注入”到这些 gzip 文件中。我所看到的所有提到 webpack 的地方都显示 webpack.dev.config.js 和 webpack.prod.config.js。但这是否意味着我们需要为每个环境构建不同的捆绑包?实际上,对于 Angular2,webpack 位被认为是“黑匣子”,无论如何都不可能提供您自己的 webpack.config 文件。
我能想到的唯一解决方法是在“main.1234abcd6946c6a08519.bundle.js”上使用 TeamCity 的“文件内容替换器”将我的配置参数替换为该环境的值,然后 gzip 该文件 - 覆盖那个由 webpack 创建。
但这太可怕了,所以我正在寻找更好的建议?
【问题讨论】:
-
你不能压缩文件...我认为你的意思是缩小
-
您的 webpack 配置只是一个节点应用程序。从 CLI 将参数传递到应用程序
-
@cgatian 通过“gzip 该文件”我的意思是使用 7zip 或其他东西以 gzip 格式将其压缩。要创建捆绑包,我需要运行“ng build -prod”,不幸的是它不接受任何与 webpack 相关的参数。
-
该死的。不知道
标签: deployment angular webpack teamcity msdeploy