我有一些资产(图像、样式),这些资产仅在开发(ng serve)期间需要。这些资产不得包含在生产构建中,在生产中,这些资产由CDN提供。
我需要:
- ng serve应服务于包含在文件夹./assets-non-build中的文件
但是:
- ng build 不应在最终构建中包括文件夹./assets-non-build
我已经阅读了10个类似的问题和5个GitHub上的问题,它们都涉及排除文件,但没有解决我的情况。
我有一些资产(图像、样式),这些资产仅在开发(ng serve)期间需要。这些资产不得包含在生产构建中,在生产中,这些资产由CDN提供。
我需要:
但是:
我已经阅读了10个类似的问题和5个GitHub上的问题,它们都涉及排除文件,但没有解决我的情况。
在你的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
中设置为空数组。
projects.{project-name}.architect.serve.options.assets
已经不再起作用了。 当运行ng serve
时,会输出以下错误信息:Data path "" should NOT have additional properties(assets)
。 - rslemosassets/
下可用
(还要确保 src/large-assets
被 Gitignore 或在 git-lfs 下)# angular.json
"projects": {
"[your-project-name]": {
"architect": {
"build": {
"configurations": {
"production": {
"assets": [
"src/favicon.ico",
"src/assets"
],
"development": {
"assets": [
"src/favicon.ico",
"src/assets",
{
"glob": "**/*",
"input": "src/large-assets/",
"output": "/assets/"
}
# src/environments/environment.ts
export const environment = {
...
assetsUrl: 'https://localhost:4200/assets/',
...
};
# src/environments/environment.prod.ts
const GCP_PROJECT_NAME = 'gcp-project-name';
export const environment = {
...
assetsUrl: `https://storage.googleapis.com/${GCP_PROJECT_NAME}.appspot.com/assets/`,
...
};
# angular.json
"projects": {
"[your-project-name]": {
"architect": {
"build": {
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
# src/components/mycomponent.ts
import { environment } from './environments/environment';
# src/components/mycomponent.html
<img [src]="environment.assetsUrl + 'images/myimage.jpeg'" alt="alt">
这是一个使用GCP的示例。
gsutil cp -r src/large-assets gs://${GCP_PROJECT_NAME}.appspot.com/
gsutil iam ch allUsers:objectViewer gs://${GCP_PROJECT_NAME}.appspot.com/
gsutil -m cp -r gs://${GCP_PROJECT_NAME}.appspot.com/assets/\* frontend/src/local-assets/
附注:代码尚未尝试,但是由于评论过长,因此在此发布为答案。
"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"
],
}
看起来Poul Kruijt的答案对于旧版本的Angular是正确的。
在Angular 9中,prod
条目对我不起作用。你必须使用production
代替。
所以这就是在Angular 9中适用于我的方法。
assets
文件夹,你已经移除了吗? - Pardeep Jain