각도, 녹식, 복판 조립, 노드.js, 서버 없음 및...새로운 Azure 정적 웹 응용 프로그램!🎉
사용자 인터페이스는 Angular 로 작성되었습니다.이 응용 프로그램의 흥미로운 점은 생성기는 백엔드 API의 핵심 부분으로 완전히 Rust로 작성된 다음에 웹 어셈블리(WASM)로 컴파일된다는 것이다.공통 API는 노드 뒤에 공개됩니다.jsfaçade는 서버 없는 Azure 기능을 통해 구현됩니다.
시작합시다...
우리는 무엇을 창조하고 있습니까?
우리는 고양이 이름 생성기 응용 프로그램을 구축할 것이다.나는 고양이를 좋아한다. 너도 좋아한다고 내기를 걸겠다.이 프로그램은 당신이 사랑하는 애완동물을 위해 독특한 고양이 이름을 발견할 수 있도록 합니다.
⚡️ https://catsify.app에서 애플리케이션 테스트⚡️
우리의 응용 프로그램 구조는 다음과 같다(중요한 부분만 표시).
.
├── api
│ ├── dist
│ │ └── func
│ ├── func
│ ├── ...
│ ├── Cargo.toml
│ └── rust
├── app
│ ├── dist
│ │ └── ui
│ ├── ...
│ └── src
├── ...
└── scripts
몇 가지 주요 기능:
.
├── api
│ ├── dist
│ │ └── func
│ ├── func
│ ├── ...
│ ├── Cargo.toml
│ └── rust
├── app
│ ├── dist
│ │ └── ui
│ ├── ...
│ └── src
├── ...
└── scripts
api
는 표준 Azure Functions 응용 프로그램 폴더입니다.api/func
노드를 포함합니다.js는 서버 기능이 없습니다.api/rust
에는 Rust 소스 코드가 포함되어 있습니다.app
각도 소스 코드를 포함합니다.api/dist/func
에는 API 구축 작업이 포함되어 있습니다.app/dist/ui
응용 프로그램 구축 부품을 포함합니다.우리는 어떻게 그것을 창조합니까?
Azure 기능: 노드.js 코드
우리의 공공 백엔드 API는 노드입니다.js Azure 함수Façade로 사용됩니다../api/func/index.ts
파일에서 우리는 "a"generate()
함수를 가져오고 호출하기만 하면 (다음 절 참조) 결과를 얻고 클라이언트에게 보낼 수 있습니다.
다음은 코드의 단순화 버전입니다.
const { generate } = require("./wasm_loader");
const func = async function (context, req) {
const name = await generate();
const [adjective, noun] = name.split(" ");
context.res = {
body: {
adjective,
noun,
},
};
};
export default func;
그러나 ./api/func/wasm_loader.ts
파일에서 이것이 신기한 일이다. 우리는 실제로 Rust에서 컴파일한 WASM 모듈을 불러오고 generate_name_str
함수를 호출하여 피드 파라미터를 전달하고 결과 문자열을 디코딩하여 출력한다.
다음은 코드의 단순화 버전입니다.
const fs = require('fs');
const path = require('path');
// the WASM file is copied to dis/func during the build
const wasmFile = path.join(__dirname, 'generator.wasm');
// a bunch of utilities to decode the WASM binary
function getInt32Memory(wasm) {...}
function getUint8Memory(wasm) {...}
function getStringFromWasm(wasm, ptr, len) {...}
// export a JavaScript function
export const generate = async function() {
// load the WASM module
const bytes = new Uint8Array(fs.readFileSync(wasmFile));
const result = await WebAssembly.instantiate(bytes);
const wasm = await Promise.resolve(result.instance.exports);
// setup args
const retptr = 8;
const seed = Date.now() % 1000 | 0;
// invoke the WASM code
const ret = wasm.generate_name_str(retptr, seed);
// decode result
const memi32 = getInt32Memory(wasm);
const v0 = getStringFromWasm(...);
wasm.__wbindgen_free(...);
// this is final the decoded name
return v0;
};
핵심 API: Rust 코드
This is NOT a deep dive guide into Rust code or WASM. You can learn about Rust and WASM on the official Rust website.
앞서 언급한 바와 같이 백엔드 API의 주요 부분은 Rust로 작성된 이름 생성기입니다.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn generate_name_str(seed: i32) -> String {
// the seed is coming from the JS side
let a = seed % (ADJECTIVES.len() as i32);
let b = seed % (NOUNS.len() as i32);
[ADJECTIVES[a as usize].to_string(), " ".to_string(), NOUNS[b as usize].to_string()].join("")
}
const ADJECTIVES: [&str; 1116] = [
"aback",
"abaft",
//...
];
const NOUNS: [&str; 1201] = [
"abbey",
"abbie",
//...
];
// used for debugging only
pub fn main() {
println!("{:?}", generate_name_str(1));
}
우리는 기본적으로 두 개의 녹 벡터를 사용하여 고양이의 명사와 형용사를 저장한 다음에 각 벡터에서 무작위 값을 선택하여 문자열을 구성한다.generate_name_str
함수 사용 #[wasm_bindgen]
외부 속성은 Rust에서 JavaScript로 내보냅니다.이것은 우리로 하여금 자바스크립트 코드에서 이 함수를 호출하고 seed 매개 변수를 전송할 수 있게 할 것이다.
사용자 인터페이스:각도 코드
Angular 응용 프로그램은 버전 10.0.0-next를 사용하여 생성됩니다.4, 클래식 설정!
각도 CLI
우리는 어떻게 그것을 건설합니까?
Azure 함수
우리의 노드.js Azure 기능 노드js 코드는 TypeScript로 작성되었기 때문에 tsc
를 사용하여 JavaScript로 전송하고 결과를 ./dist/func
폴더로 출력합니다.
cd api
tsc # will create ./dist/func/
WASM 녹슨
Rust 코드의 경우 WASM 모듈을 컴파일하고 생성하기 위해 사용됩니다 [wasm-pack](https://github.com/rustwasm/wasm-pack)
.
cd api
wasm-pack build # will create ./pkg/
및 api/Cargo.toml
의 다음 구성:
[dependencies]
wasm-bindgen = "0.2.58"
[lib]
crate-type = ["cdylib", "rlib"]
path = "rust/lib.rs"
[[bin]]
name = "generator"
path = "rust/lib.rs"
[profile.release]
lto = true
panic = "abort"
# Tell `rustc` to optimize for small code size.
opt-level = "s"
Note: wasm-pack
generates a Node.js wrapper that loads the WASM module. Since we wrote our own loader, we are only interested in the *.wasm
file. We will then need to copy the WASM file to the ./api/dist/func
:
cp pkg/catsify_bg.wasm dist/func/generator.wasm
각진 몸매
Angular 응용 프로그램을 구축하는 것은 간단합니다.Angular CLI가 담당하는 모든 기능:
ng build --prod
이 명령은 ./app/dist/ui
아래에 패키지를 생성합니다.
프로젝트 구축 개요
cd api
tsc # builds the Azure function.
wasm-pack build # builds the WASM module.
cp pkg/catsify_bg.wasm \
dist/func/generator.wasm
cd ../app
ng build --prod # builds the front-end app.
프런트엔드 Angular 응용 프로그램과 백엔드 서버 없는 API를 만들었기 때문에 Azure에서 정적 서버 없는 응용 프로그램을 가장 쉽게 실현할 수 있는 것은 무엇입니까?
소개:
! 🎉
Azure Static Web Apps는 Azure 애플리케이션 서비스의 신제품입니다.이것은 서버 API가 지원되지 않는 현대 웹 응용 프로그램에 적용되는 새로운 간소화 관리 옵션이다.
Static Web Apps
혜택:
const { generate } = require("./wasm_loader");
const func = async function (context, req) {
const name = await generate();
const [adjective, noun] = name.split(" ");
context.res = {
body: {
adjective,
noun,
},
};
};
export default func;
const fs = require('fs');
const path = require('path');
// the WASM file is copied to dis/func during the build
const wasmFile = path.join(__dirname, 'generator.wasm');
// a bunch of utilities to decode the WASM binary
function getInt32Memory(wasm) {...}
function getUint8Memory(wasm) {...}
function getStringFromWasm(wasm, ptr, len) {...}
// export a JavaScript function
export const generate = async function() {
// load the WASM module
const bytes = new Uint8Array(fs.readFileSync(wasmFile));
const result = await WebAssembly.instantiate(bytes);
const wasm = await Promise.resolve(result.instance.exports);
// setup args
const retptr = 8;
const seed = Date.now() % 1000 | 0;
// invoke the WASM code
const ret = wasm.generate_name_str(retptr, seed);
// decode result
const memi32 = getInt32Memory(wasm);
const v0 = getStringFromWasm(...);
wasm.__wbindgen_free(...);
// this is final the decoded name
return v0;
};
This is NOT a deep dive guide into Rust code or WASM. You can learn about Rust and WASM on the official Rust website.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn generate_name_str(seed: i32) -> String {
// the seed is coming from the JS side
let a = seed % (ADJECTIVES.len() as i32);
let b = seed % (NOUNS.len() as i32);
[ADJECTIVES[a as usize].to_string(), " ".to_string(), NOUNS[b as usize].to_string()].join("")
}
const ADJECTIVES: [&str; 1116] = [
"aback",
"abaft",
//...
];
const NOUNS: [&str; 1201] = [
"abbey",
"abbie",
//...
];
// used for debugging only
pub fn main() {
println!("{:?}", generate_name_str(1));
}
Azure 함수
우리의 노드.js Azure 기능 노드js 코드는 TypeScript로 작성되었기 때문에
tsc
를 사용하여 JavaScript로 전송하고 결과를 ./dist/func
폴더로 출력합니다.cd api
tsc # will create ./dist/func/
WASM 녹슨
Rust 코드의 경우 WASM 모듈을 컴파일하고 생성하기 위해 사용됩니다
[wasm-pack](https://github.com/rustwasm/wasm-pack)
.cd api
wasm-pack build # will create ./pkg/
및 api/Cargo.toml
의 다음 구성:[dependencies]
wasm-bindgen = "0.2.58"
[lib]
crate-type = ["cdylib", "rlib"]
path = "rust/lib.rs"
[[bin]]
name = "generator"
path = "rust/lib.rs"
[profile.release]
lto = true
panic = "abort"
# Tell `rustc` to optimize for small code size.
opt-level = "s"
Note:
wasm-pack
generates a Node.js wrapper that loads the WASM module. Since we wrote our own loader, we are only interested in the*.wasm
file. We will then need to copy the WASM file to the./api/dist/func
:
cp pkg/catsify_bg.wasm dist/func/generator.wasm
각진 몸매
Angular 응용 프로그램을 구축하는 것은 간단합니다.Angular CLI가 담당하는 모든 기능:
ng build --prod
이 명령은 ./app/dist/ui
아래에 패키지를 생성합니다.프로젝트 구축 개요
cd api
tsc # builds the Azure function.
wasm-pack build # builds the WASM module.
cp pkg/catsify_bg.wasm \
dist/func/generator.wasm
cd ../app
ng build --prod # builds the front-end app.
프런트엔드 Angular 응용 프로그램과 백엔드 서버 없는 API를 만들었기 때문에 Azure에서 정적 서버 없는 응용 프로그램을 가장 쉽게 실현할 수 있는 것은 무엇입니까?소개:
! 🎉
Azure Static Web Apps는 Azure 애플리케이션 서비스의 신제품입니다.이것은 서버 API가 지원되지 않는 현대 웹 응용 프로그램에 적용되는 새로운 간소화 관리 옵션이다.
Static Web Apps
혜택:
API 어플리케이션을 위한 브랜드 맞춤형 구성
Custom domains 공급업체와 Azure Active Directory, Facebook, Google, GitHub, Twitter의 통합.
라우팅 규칙 응용 프로그램을 3단계로 배치합시다!
끌어오기 요청 미리보기 버전 활성화 GitHub 계정 연결
구축 정보 제공
Azure 정적 웹 애플리케이션에서 GitHub의 애플리케이션 구축 및 배포 보기
Note: The YML workflow file created by Azure Static Web Apps has been updated with custom build steps.
해보다
icrosoft Learn for Static Web Apps quickstart 및 API 또는 for Static Web Apps documentation 에서 학습 경로를 안내합니다.
Angular, React, Svelte 또는 Vue JavaScript 응용 프로그램 작성 및 게시 리소스
Visual Studio 코드를 사용하여 첫 번째 함수 생성 / 무료 평가판 Azure
Catsify는 간단하고 창의적인 응용 프로그램으로 당신이 사랑하는 고양이를 위해 독특한 이름을 찾을 수 있도록 도와줍니다
manekinekko
catsify
Catsify란 무엇입니까?
Catsify는 Azure 정적 웹 응용 프로그램에 위탁 관리되는 고양이 이름 생성기입니다.기술 스택은 다음과 같습니다.
Bazel 의존도
UI
API
Reference
이 문제에 관하여(각도, 녹식, 복판 조립, 노드.js, 서버 없음 및...새로운 Azure 정적 웹 응용 프로그램!🎉), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/angular-rust-webassembly-node-js-serverless-and-the-new-azure-static-web-apps-cnb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)