OpenJSアーキテクトにおけるサーバレス依存性管理
17554 ワード
OpenJS Architect AWSにServerlessなアプリケーションを書いて、配備するためのオープンソースフレームワークです.各アーキテクトプロジェクトは、独自の孤立したランタイムでstatelesslyに実行される多くの小さくて独立したラムダ関数から成ります.
では、どのようにして共有コードと関数間の依存関係を管理できますか?
rootで定義された依存関係
最初に、新しい建築家プロジェクトを作成することから始めてください
だから今我々はそれを使用することができます
これは、全体の内容を注意することが重要です
ヘルパー関数の例を作りましょう.
開始するには、コマンドラインから新しいプロジェクトを作成します.
The
変更する
新しいフォルダとファイルを作成します.
次に、変更します
最後に、いくつかのファインダー制御を取得する関数を取得する
コードを変更する
REPOの完全なコード例を見てください.https://github.com/pchinjr/arc-shared-views-example
では、どのようにして共有コードと関数間の依存関係を管理できますか?
rootで定義された依存関係
package.json
以下のように展開している各ラムダ関数に依存関係を使用します@architect/functions
図書館.アーキテクトは、プロジェクトのルートを使用する能力を発見する必要がありますpackage.json
あなたのラムダ関数に依存関係をインストールするには.例を見てみましょう.最初に、新しい建築家プロジェクトを作成することから始めてください
npm init @architect ./arc-example
cd arc-example
npm install @architect/functions
インストールによって@architect/functions
根までpackage.json
それはあなたがそれを必要なときにすべての機能に利用できるようになります.機能ごとに依存関係を管理する必要はありませんpackage.json
.だから今我々はそれを使用することができます
get-index
関数.// src/http/get-index/index.js
let arc = require('@architect/functions')
async function route(req) {
return {
statusCode: 200,
html: `<h1> Praise Cage </h1>`
}
}
exports.handler = arc.http.async(route)
src/shared
and src/views
共有コードを処理する別の方法は、特別なフォルダsrc/shared
. 建築家は、抽象的なあなたの機能のコードを再利用する簡単な方法を提供します.ほとんどのアプリケーションはロジック、テンプレート、ユーティリティを共有する必要があります.これをするために、建築家は、フォルダ・コンベンションを使用してsrc/shared
and src/views
各関数のnode_modules
ディレクトリ.これは、全体の内容を注意することが重要です
src/shared
再帰的にコピーされる.ディレクトリ構造をできるだけ平らにし、ペイロードをできるだけ小さくして性能を向上させることをお勧めします.ヘルパー関数の例を作りましょう.
src/shared
例開始するには、コマンドラインから新しいプロジェクトを作成します.
npm init @architect ./arc-shared-views
次に、我々はapp.arc
次のプロジェクトのルートファイルです.# app.arc file
@app
arc-shared
@http
get /
get /answer
今、我々は我々を造り出すことができますsrc/shared
モジュールを新しいフォルダを作成するsrc/shared/helper.js
. この例では、数が文字列に変換され、このヘルパー関数がトリックを行うことを確認する必要があります!// src/shared/helper.js
function theAnswer() {
//really important number that needs to be converted to a string
let universe = 42
return universe.toString()
}
module.exports = theAnswer
我々は、ちょうどそれを必要とすることによって、我々の機能のすべてでこのヘルパーを使うことができます@architect/shared
. 次の関数を取得します// src/http/get-answer/index.js
let Answer = require('@architect/shared/helper')
exports.handler = async function http (req) {
return {
statusCode: 200,
headers: {
'cache-control': 'no-cache, no-store, must-revalidate, max-age=0, s-maxage=0',
'content-type': 'text/html; charset=utf8'
},
body: `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> The Answer is </title>
</head>
<body>
<p> This is the Answer: ${Answer()} </p>
</body>
</html>
`
}
}
ランnpm start
コマンドラインから、我々のコード構造を見てください.サンドボックスは、我々の機能を水和させますnode_modules/@architect/shared
展開して実行されるとき、関数のペイロードの一部であるディレクトリ..
├── src
│ ├── http
│ │ ├── get-index/
│ │ └── get-answer/
│ │
│ └── shared/
│ └── helper.js
│
├── app.arc
└── package.json
ときに移動http://localhost:3333/answer あなたは私たちの共有モジュールからのデータで迎えられます、そして、それは他のどんな機能によってでも使われることができます.src/views
例The
src/views
フォルダーは、それぞれのHTPP機能のためのコードを含めるルートを含めることができます特別な場所です.続きを読むsrc/shared
HTTP機能を使用できるレイアウトテンプレートを使用します.変更する
app.arc
次のファイルにマッチします.@app
arc-shared
@http
get /
get /answer
get /about
get /css/:stylesheet
@views
get /
get /about
我々がしたことは、2つの新しいルートを加えました/about
and css/:stylesheet
, それから2つのルートを宣言した/
and /about
は、src/views
. 新しいフォルダとファイルを作成します.
src/views/layout.js
. このファイルで次の内容を書きますmodule.exports = function Layout (props) {
props = props || {}
let heading = props.heading || 'Architect views!'
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Architect example</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<h1>${heading}</h1>
</body>
</html>
`
}
これは、それぞれのGETルートで使用される共有ビューテンプレートです@views
プラグマapp.arc
ファイル.次に、変更します
src/http/get-index/index.js
次のようにします.let Layout = require('@architect/views/layout')
exports.handler = async function http (request) {
try {
return {
statusCode: 200,
headers: {
'content-type':'text/html; charset=utf8'
},
body: Layout()
}
} catch (e) {
console.error(e)
return {
headers: {
type: 'application/json; charset=utf8',
},
status: 500,
body: JSON.stringify({
name: e.name,
message: e.message,
stack: e.stack
}, null, 2)
}
}
}
この関数は、レイアウトファイルを呼び出し、その出力をレスポンスの本文として返します.次に、ページに設定することで、プロップに別のセットを送ることができます.変更するsec/http/get-about/index.js
次のようにします.let Layout = require('@architect/views/layout')
exports.handler = async function http (request) {
try {
return {
statusCode: 200,
headers: {
'content-type':'text/html; charset=utf8'
},
body: Layout({heading: 'About'})
}
} catch (e) {
console.error(e)
return {
status: 500,
type: 'application/json; charset=utf8',
body: JSON.stringify({
name: e.name,
message: e.message,
stack: e.stack
}, null, 2)
}
}
}
現在/about
が要求された場合、この関数は実行され、Layout()
.最後に、いくつかのファインダー制御を取得する関数を取得する
/src/views
コピーします.我々は、この@views
プラグマapp.arc
ファイル.我々はスタイルシートにURLを作成したいが、この関数はレイアウトコードへのアクセスを必要としません.下のGETルートだけ@views
はsrc/views
コードをコピーします.の最初のルート/answer
でないsrc/views
モジュールnode_modules
. コードを変更する
src/http/get-css-000stylesheet/index.js
次のようにします.const styles = `
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
`
exports.handler = async function http (request) {
return {
statusCode: 200,
type: 'text/css; charset=utf8',
body: styles
}
}
OK!先に行きなさいnpm start
プロジェクトのルートからhttp://localhost:3333 アクションで我々のアプリを参照してください.ルートを変更するhttp://localhost:3333/about そして、あなたは我々の適当が予想通りに通過されるのを見ます.REPOの完全なコード例を見てください.https://github.com/pchinjr/arc-shared-views-example
Reference
この問題について(OpenJSアーキテクトにおけるサーバレス依存性管理), 我々は、より多くの情報をここで見つけました https://dev.to/pchinjr/serverless-dependency-management-in-openjs-architect-13ekテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol