我有一个带有一些后端(Node.js)和前端(Angular)服务的 monorepo 。目前我的部署过程如下所示:
我的目标是在Bazel和Cloud Build的帮助下自动化所有这些步骤。但我真的很难开始使用 Bazel:
为了使它工作,我可能需要为我自己的包/服务添加一个WORKSPACE包含外部依赖项的文件和多个BUILD文件?我需要实际实施方面的帮助:
我整理了一个小样本 monorepo来展示我的用例
??? kubernetes
??? packages
? ??? enums
? ??? utils
??? services
??? gateway
Run Code Online (Sandbox Code Playgroud)
Gateway服务取决于enums和utilsDockerfile里面有一个 …假设我有一个简单的 Angular 组件:
@Component({
selector: 'app-email-content',
template: '<h1>Welcome {{username}}!</h1>'
})
export class WelcomeEmailComponent {
@Input() username: string
}
Run Code Online (Sandbox Code Playgroud)
我的目标是使用这个 Angular 组件并使用 Node.Js 将其呈现为纯 HTML,以发送定制的电子邮件。
我知道使用Angular Universal绝对可以进行服务器端渲染。但我不确定如何显式呈现一个特定组件。
我想创建一个 NgRx 动作创建器工厂。但我不知道如何将泛型类型传递给该props方法。
import { createAction, props } from "@ngrx/store";
function actionFactory<T>(name: string) {
return createAction(name, props<T>());
// ^^^^^^^^^^
}
Run Code Online (Sandbox Code Playgroud)
它抛出这个错误
Type 'Props<T>' provides no match for the signature '(...args: any[]): object'
Run Code Online (Sandbox Code Playgroud)
我需要如何修改工厂方法才能将泛型类型传递给props这样的方法?:
Type 'Props<T>' provides no match for the signature '(...args: any[]): object'
Run Code Online (Sandbox Code Playgroud)
你可以在Stackblitz上亲自尝试一下
我必须做同样的事情,虽然我更喜欢第一个.但第一种方法似乎不起作用.(tap()未触发)
// does not work
this.actions$.pipe(
ofType(LayoutActions.Types.CHANGE_THEME),
takeUntil(this.destroyed$),
tap(() => {
console.log('test')
}),
);
// works
this.actions$.ofType(LayoutActions.Types.CHANGE_THEME).subscribe(() => {
console.log('test')
});
Run Code Online (Sandbox Code Playgroud) 我在Typescript Monorepo内部操作。我想将带有Jest测试的Angular 8前端添加到Monorepo。但是我遇到了一些问题。
我在用
Angular CLI: 8.3.5
Run Code Online (Sandbox Code Playgroud)
我将使用此存储库作为起点!
然后在<root>/services我跑:
ng new frontend
Run Code Online (Sandbox Code Playgroud)
创建Angular应用程序后,我可以运行ng test以下结果:
一切正常。
我正在使用https://github.com/briebug/jest-schematic轻松将Jest添加到我的Angular应用程序中
yarn global add @briebug/jest-schematic
ng add @briebug/jest-schematic
Run Code Online (Sandbox Code Playgroud)
这导致以下更改
运行会jest导致以下错误:
$ jest
FAIL src/app/app.component.spec.ts
? Test suite failed to run
File not found: <rootDir>/src/tsconfig.spec.json (resolved as: /home/flo/Desktop/stackoverflow-monorepo-angular-jest/services/frontend/src/tsconfig.spec.json)
at ConfigSet.resolvePath (node_modules/ts-jest/dist/config/config-set.js:712:19)
at ConfigSet.get (node_modules/ts-jest/dist/config/config-set.js:202:67)
at ConfigSet.tsJest (node_modules/ts-jest/dist/util/memoize.js:43:24)
at ConfigSet.get (node_modules/ts-jest/dist/config/config-set.js:297:41)
at ConfigSet.versions (node_modules/ts-jest/dist/util/memoize.js:43:24)
at ConfigSet.get (node_modules/ts-jest/dist/config/config-set.js:583:32)
at ConfigSet.jsonValue (node_modules/ts-jest/dist/util/memoize.js:43:24)
at ConfigSet.get [as cacheKey] …Run Code Online (Sandbox Code Playgroud) 我有这个 BUILD 文件:
package(default_visibility = ["//visibility:public"])
load("@npm_bazel_typescript//:index.bzl", "ts_library")
ts_library(
name = "lib",
srcs = glob(
include = ["**/*.ts"],
exclude = ["**/*.spec.ts"]
),
deps = [
"//packages/enums/src:lib",
"//packages/hello/src:lib",
"@npm//faker",
"@npm//@types/faker",
"@npm//express",
"@npm//@types/express",
],
)
load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
nodejs_image(
name = "server",
data = [":lib"],
entry_point = ":index.ts",
)
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
container_push(
name = "push_server",
image = ":server",
format = "Docker",
registry = "gcr.io",
repository = "learning-bazel-monorepo/server",
tag = "dev",
)
load("@io_bazel_rules_k8s//k8s:object.bzl", "k8s_object")
k8s_object(
name = "k8s_deploy",
kind = "deployment",
namespace = "default", …Run Code Online (Sandbox Code Playgroud) 过去几周我一直在构建一个 Typescript monorepo,它可以使用 Bazel 构建并部署到 Kubernetes。但最后一块拼图是集成一个 Angular 应用程序到整个工作流程中,我真的很纠结。
??? WORKSPACE
??? BUILD.bazel
??? package.json
??? packages
? ??? package1
? ??? package2
? ??? package3
??? services
??? service1
??? service2
??? service3
+ ??? angular-app
Run Code Online (Sandbox Code Playgroud)
WORKSPACE 根目录下的文件BUILD.bazel 根目录下的文件package.json根中只有一个BUILD.bazel文件最后,我希望能够k8s_object为 Angular 应用程序添加一个BUILD.bazel像这样的根文件:
load("@io_bazel_rules_k8s//k8s:objects.bzl", "k8s_objects")
k8s_objects(
name = "kubernetes_deployment",
objects = [
"//services/service1",
"//services/service2",
"//services/service3",
+ "//services/angular-app"
]
)
Run Code Online (Sandbox Code Playgroud)
它应该在我运行时将 Angular 应用程序部署到 …
我通过aws-sdkNodejs发送电子邮件,如下所示:
const params = {
Destination: {
ToAddresses: [... ],
},
Message: {
Body: {
Html: {
Data: `...`,
Charset: 'utf-8'
},
},
Subject: {
Data: `...`,
Charset: 'utf-8'
}
},
Source: 'support@mydomain.com',
ReturnPath: 'support@mydomain.com',
};
awsConfig.ses.sendEmail(params, (err, data))
Run Code Online (Sandbox Code Playgroud)
目前support发件人名称是,因为发件人电子邮件是support@mydomain.com。但我希望它被GitHub下面的公司取代。
在此先感谢您的帮助!
email amazon-web-services node.js aws-sdk amazon-simple-email-service
我有一个页面,用户可以上传文件的帮助下FormData和XMLHttpRequest。上传文件效果很好。但upload.onprogress在只有工作时上传一个HTTP连接。
我已经在Heroku和Amazon EC2实例上对此进行了测试。但是总是一样的:
const xhr = new XMLHttpRequest();
let progress = 0;
/** THIS EVENT IS NOT WORKING WITH HTTPS */
xhr.upload.onprogress = (event: ProgressEvent) => {
if (event.lengthComputable) {
progress = 100 * (event.loaded / event.total);
}
};
xhr.responseType = 'json';
xhr.open('POST', `${API_URL}/${this.API_PATH}/upload`, true);
xhr.setRequestHeader('authorization', this.authService.getAuthToken());
xhr.send(payload);
xhr.onload = () => {
observer.next(xhr.response);
observer.complete();
};
Run Code Online (Sandbox Code Playgroud)
const busboyBodyParser = require('busboy-body-parser');
app.use(busboyBodyParser())
Run Code Online (Sandbox Code Playgroud)
const …Run Code Online (Sandbox Code Playgroud) 我想在Google Cloud Build和Google Kubernetes Engine的帮助下完全自动化许多服务的部署。这些服务位于monorepo 中,它有一个名为.services
所以我cloudbuild.yaml为每个服务创建了一个并创建了一个构建触发器。这样cloudbuild.yaml做:
随着服务数量的增加,构建触发器的数量也会增加。也有越来越多的服务被构建,即使它们没有改变。
因此我想要一种机制,它只有一个构建触发器并自动确定需要重建哪些服务。
假设我有一个具有此文件结构的 monorepo:
??? packages
? ??? enums
? ??? components
??? services
??? backend
??? frontend
??? admin-dashboard
Run Code Online (Sandbox Code Playgroud)
然后我对frontend服务进行了一些更改。由于frontend和admin-dashboard服务依赖于components包,因此需要重建多个服务:
但不是后端!
为每个服务设置多个构建触发器。但是这些构建中有 80% 是多余的,因为代码中的大多数更改仅与个人服务相关。管理许多看起来几乎相同的构建触发器也越来越复杂。单个cloudbuild.yaml文件如下所示:
steps: …Run Code Online (Sandbox Code Playgroud) build-automation google-cloud-platform kubernetes monorepo google-cloud-build
angular ×4
monorepo ×4
bazel ×3
kubernetes ×3
ngrx ×3
node.js ×3
typescript ×3
amazon-simple-email-service ×1
angular8 ×1
aws-sdk ×1
busboy ×1
docker ×1
email ×1
https ×1
javascript ×1
jestjs ×1
rxjs ×1