【问题标题】:Exclude assets in production build在生产构建中排除资产
【发布时间】:2018-11-14 10:14:00
【问题描述】:

我有一些仅在开发过程中需要的资产(图像、样式)(ng serve)。这些资产不得包含在生产构建中。在生产中,这些资产由 CDN 提供。

我需要:

  • ng serve 应该提供文件夹中包含的文件 ./assets-non-build

但是:

  • ng build 不应将文件夹 ./assets-non-build 包含在 最终构建

我在 SO 上解决了 10 个类似的问题,在 github 上解决了 5 个问题,它们都处理排除文件,但没有一个解决我的情况。

【问题讨论】:

  • 可能您需要从 angular.json 配置中排除您的 assets 文件夹,您删除了吗?
  • 如果我从 angular.json 中删除它,ng serve 将不再提供该资产文件夹中的文件(我通过 ajax 请求加载它们)
  • 还没试过,但是有两种选择,一种用于构建,另一种用于服务,所以可能需要根据要求进行设置
  • 听起来很有趣!如何设置构建和服务选项?

标签: angular angular-cli


【解决方案1】:

在您的angular.json 中有一个配置对象projects.{project-name}.architect.build.configurations

将 prod 条目中的 assets 设置为 []

"production": {
  //...
  "assets": []
}

虽然这是未经测试的,但从我从配置文件中知道的情况来看,这应该是可能的。

这将使任何构建和服务都带有生产标志以排除资产。如果您真的希望所有构建(无论环境如何)都在没有资产的情况下构建,请将 assets 数组从 projects.{project-name}.architect.build.options 移动到 projects.{project-name}.architect.serve.options 并将 build 中的一个设置为空数组。

【讨论】:

  • 但是资产只对serve可用?
  • 使用 prod 时显示:“在项目中找不到配置 'production'”,我可以通过将“prod”重命名为“production”来解决此问题
  • 这取决于你如何命名配置,但默认是 prod :) 这就是我恢复它的原因
  • architect->build->options->assets: ["my-dev-only-asset.css"] 将可用于服务
  • 设置属性 projects.{project-name}.architect.serve.options.assets 不再适用于 Angular 9 甚至更早版本(此处为 CLI 9.1.1):ng serve 输出 Data path "" should NOT have additional properties(assets)
【解决方案2】:

PS:代码尚未尝试,但评论太长了,所以在这里发布作为答案。

"architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                        ....
                        "tsConfig": "src/tsconfig.app.json",
                        "assets": [
                            "src/favicon.ico",
                            "src/assets"
                        ],
                        "styles": [
                             ...
                        ],
                        "scripts": []
                    }
                    }
                },
                "serve": {
                        "assets": [
                            "src/assets"
                        ],
                }

【讨论】:

  • 我也尝试过这种方法,因为“服务”下似乎不允许“资产”。不过谢谢你的帮助! :-)
  • @TobiasGassmann 欢迎您,但接受的答案与我的某处不相似?
  • 哈哈,我的运气不好 :P 无论如何感谢您对已接受答案的评论,现在有了新的东西:)
【解决方案3】:

看来 Poul Kruijt 的答案对于旧版本的 Angular 是正确的。 在 Angular 9 prod 条目对我不起作用。您必须改用production。 这就是 Angular 9 中对我有用的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2018-06-09
    • 2015-02-06
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多