Angular CLI (7.0.5) 用于开发和生产的不同资产?

Und*_*ade 5 angular-cli angular

是否可以使用 Angular CLI (7.0.5) 为开发和生产提供不同的资产?

对于生产,我想要资产:

"assets": [
   "projects/example/src/favicon.ico"
]
Run Code Online (Sandbox Code Playgroud)

对于开发,我想要资产:

"assets": [
   "projects/example/src/favicon.ico",
   "projects/example/src/assets/development.css"
]
Run Code Online (Sandbox Code Playgroud)

先感谢您。

Und*_*ade 8

我找到了一种让它工作的方法,它并不漂亮,但它有效。

在您的 angular.json 文件中,您可以复制当前项目,在我的情况下,我的项目名为“example”。我将复制的项目重命名为“example-dev”。请参阅下面的代码:

{
...
"projects": {
    "example": {
        "root": "projects/example/",
        "sourceRoot": "projects/example/src",
        "projectType": "application",
        "prefix": "app",
        "schematics": {},
        "architect": {
            "build": {
                "builder": "@angular-devkit/build-angular:browser",
                "options": {
                    "outputPath": "dist/example",
                    "index": "projects/example/src/index.html",
                    "main": "projects/example/src/main.ts",
                    "polyfills": "projects/example/src/polyfills.ts",
                    "tsConfig": "projects/example/tsconfig.app.json",
                    "assets": [
                        "projects/example/src/favicon.ico"
                    ],
                    "styles": [
                        "projects/example/src/styles.scss"
                    ],
                    "scripts": []
                }
            },
            "serve": {
                "builder": "@angular-devkit/build-angular:dev-server",
                "options": {
                    "browserTarget": "example:build"
                }
            }
        }
    },
    "example-dev": {
        "root": "projects/example/",
        "sourceRoot": "projects/example/src",
        "projectType": "application",
        "prefix": "app",
        "schematics": {},
        "architect": {
            "build": {
                "builder": "@angular-devkit/build-angular:browser",
                "options": {
                    "outputPath": "dist/example",
                    "index": "projects/example/src/index.html",
                    "main": "projects/example/src/main.ts",
                    "polyfills": "projects/example/src/polyfills.ts",
                    "tsConfig": "projects/example/tsconfig.app.json",
                    "assets": [
                        "projects/example/src/favicon.ico",
                        "projects/example/src/assets/development.css"
                    ],
                    "styles": [
                        "projects/example/src/styles.scss"
                    ],
                    "scripts": []
                }
            },
            "serve": {
                "builder": "@angular-devkit/build-angular:dev-server",
                "options": {
                    "browserTarget": "example-dev:build"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在项目“example”(生产)中,我删除了资产中的“projects/example/src/assets/development.css”行。在项目“example-dev”中,我将服务中的 browserTarget 更改为“example-dev:build”而不是“example:build”

如果我想为开发项目提供服务:

ng serve example-dev -o
Run Code Online (Sandbox Code Playgroud)

如果我想为生产项目提供服务:

ng serve example -o
Run Code Online (Sandbox Code Playgroud)

如果有人有更清洁的解决方案,那么我很乐意听到:)

已编辑

感谢 Karthick Venkat,我找到了另一种使它工作的方法,它更干净。

在您的 angular.json 文件中,您需要添加一个新的开发配置。请参阅下面的代码:

{
"projects": {
    "example": {
        "root": "projects/example/",
        "sourceRoot": "projects/example/src",
        "projectType": "application",
        "prefix": "app",
        "schematics": {},
        "architect": {
            "build": {
                "builder": "@angular-devkit/build-angular:browser",
                "options": {
                    "outputPath": "dist/example",
                    "index": "projects/example/src/index.html",
                    "main": "projects/example/src/main.ts",
                    "polyfills": "projects/example/src/polyfills.ts",
                    "tsConfig": "projects/example/tsconfig.app.json",
                    "styles": [
                        "projects/example/src/styles.scss"
                    ],
                    "scripts": []
                },
                "configurations": {
                    "production": {
                        "fileReplacements": [{
                            "replace": "projects/example/src/environments/environment.ts",
                            "with": "projects/example/src/environments/environment.prod.ts"
                        }],
                        "optimization": true,
                        "outputHashing": "none",
                        "sourceMap": false,
                        "extractCss": true,
                        "namedChunks": false,
                        "aot": true,
                        "extractLicenses": true,
                        "vendorChunk": false,
                        "buildOptimizer": true,
                        "assets": [
                            "projects/example/src/favicon.ico"
                        ]
                    },
                    "development": {
                        "assets": [
                            "projects/example/src/favicon.ico",
                            "projects/example/src/assets"
                        ]
                    }
                }
            },
            "serve": {
                "builder": "@angular-devkit/build-angular:dev-server",
                "options": {
                    "browserTarget": "example:build"
                },
                "configurations": {
                    "production": {
                        "browserTarget": "example:build:production"
                    },
                    "development": {
                        "browserTarget": "example:build:development"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

如果我想为开发项目提供服务:

ng serve example --configuration=development -o
Run Code Online (Sandbox Code Playgroud)

如果我想为生产项目提供服务:

ng serve example --configuration=production -o
Run Code Online (Sandbox Code Playgroud)

或者

ng serve example -o
Run Code Online (Sandbox Code Playgroud)

  • 这里的编辑似乎是当前合适的解决方案。请注意,到目前为止,Angular-cli 似乎不支持全局资产配置(在 build:options 中)以及特定构建配置中的资产配置。您要么对所有构建使用相同的(选项),要么在不同的构建中定义所有资产。 (3认同)

Kar*_*kat 2

我们在 angular.json 的生产配置下有一个名为 fileReplacements 的选项。您可以在那里替换文件。

注意:我没有测试过。