2017-08-28 8 views
2

私たちのプロジェクトでは、最近、es6 +の機能によって私たちの生活がはるかに楽になるいくつかの実装では、しかし、この「より簡単な」ものは、​​サーバレスのものと組み合わされたバベルによってあまり翻訳されていません。サーバレスのバーベルを正しく実装しました

+ 
|- serverless.yaml 
|- package.json 
|- .babelrc 
|- /src 
    |- handler.js 
    |- package.json 
|- /test 
    |- test.js 

これは、プロジェクト全体のフォルダを示しています

プロジェクト構造は次のようです。以下は、個々のファイルのソースコードです。

serverless.yaml

provider: 
    name: aws 
    runtime: nodejs6.10 
functions: 
    getHello: 
    handler: handler.lambdaGetHello 
    events: 
     - http: 
      path: api/hello 
      method: GET 
      authorizer: aws_iam 
      cors: true 
    package: 
     include: 
     - handler.js 
     - node_modules/** 

package.json(トップレベル、これはおそらく、あまりにも、あまりにも多くのパッケージを持って、実際のコードは、しかし、これは順番に可能性があり、洗浄、より多くの用途を持っていることに注意してください)

{ 
    "name": "Default-package-JSON-file", 
    "version": "0.1.0", 
    "description": "Simple serverless test", 
    "scripts": { 
    "build": "npm run build:init && npm run build:js && npm run build:install", 
    "build:init": "rm -rf dist && mkdir dist && rm -rf src/node_modules && rm -rf src/test", 
    "build:install": "cp src/package.json dist/ && cd dist && yarn", 
    "build:js": "babel src --out-dir dist", 
    "install-base": "npm run install-base:tld && npm run install-base:src", 
    "install-base:tld": "yarn", 
    "install-base:src": "cd src/ && yarn", 
    "svl-deploy": "cp serverless.yaml dist/ && cd dist && serverless deploy", 
    "test-dist": "cp -R test/ dist/ && cd dist && mocha", 
    "test-src": "cp -R test/ src/ && cd src && mocha" 
    }, 
    "author": "Mathieu Devos", 
    "license": "UNLICENSED", 
    "dependencies": { 
    "add": "^2.0.6", 
    "babel-runtime": "^6.26.0", 
    "chai": "^4.0.1", 
    "mocha": "^3.4.2", 
    "serverless": "^1.20.2" 
    }, 
    "devDependencies": { 
    "babel-cli": "^6.26.0", 
    "babel-core": "^6.26.0", 
    "babel-eslint": "^7.2.3", 
    "babel-plugin-transform-async-to-generator": "^6.24.1", 
    "babel-plugin-transform-class-properties": "^6.24.1", 
    "babel-plugin-transform-runtime": "^6.23.0", 
    "babel-polyfill": "^6.26.0", 
    "babel-preset-es2015": "^6.24.1", 
    "babel-register": "^6.26.0" 
    }, 
    "private": true 
} 

{ 
    "plugins": [ 
    "transform-async-to-generator", 
    "transform-runtime", { 
     "polyfill": false, 
     "regenerator": true 
     }], 
    "presets": ["es2015"] 
} 

.babelrcのsrc/handler.js(明らかにすべてが定義されていません、これは単なる例です)。

async function hello(items = []) { 
    const output = []; 
    for (const item of items) { 
     output.push(await item.handle()); 
    } 
    return output; 
}; 
module.exports.hello = hello; 

const lambdaAddItems = (event, context, cb) => { 
    const req = new Request(event); 
    const args = context.args; 
    magicFunction(hello, [args], callback); 
}; 
module.export.lambdaHello = hello; 

のsrc/package.json(これが唯一のSRCに必要なすべての種類のパッケージが含まれている、今、これは単に要求を行うのに十分含まれています)。

{ 
    "name": "source-package-json-file", 
    "version": "0.1.0", 
    "description": "Generic package module for source code", 
    "scripts": {}, 
    "author": "Mathieu Devos", 
    "license": "UNLICENSED", 
    "dependencies": { 
    "lambda-proxy-utils": "^1.2.4" 
    }, 
    "devDependencies": {}, 
    "private": true 
} 

test/test.js(ローカルコードをテスト)。

const handler = ../handler.js; 
const hello = handler.hello; 
const lambdaHello = handler.lambdaHello; 

... 

Run the tests 

このコードを実行するにはどうすればよいですか?

(あなたがそうしてください場合は、ローカル・スクリプト)私たちは、パイプラインを持っているために、次のコマンドを実行します

NPMの実行インストールベースを NPMランテスト-SRC NPMの実行は NPMの実行を構築するテスト - DIST NPMラン異なるコマンドの

説明SVL-展開: 1)NPM実行インストールベース - すべてのDEVの依存関係とリンティング、試験、バベル、およびサーバレスを実行するためのコマンドをインストールします。また、/ srcに移動して、srcを実行できるようにパカクをインストールします。

2)npm run test-src - テストをsrcにコピーして実行すると、すべてのコードがローカルフォルダDISTにコピーテスト - SRCからnode_modules &テストを削除し、バベルを使用してDISTするSRCを変換する(これは実際に適切に変換)

4)NPMランテスト-distの - ケースsrcフォルダ)

3)は、ビルドを実行するNPMこれを実行すると、この場合distのローカルフォルダにテストされます。ここで問題は、ではなくが動作しないことです。--require babel-polyfillコマンドなし。しかし、翻訳が行われました

5)npmはsvl-deployを実行します - すべてがうまくいくとすれば、サーバレスに展開してください。

の問題は、私が--requireバベル-ポリフィルせずにそれを実行した場合、私はエラーを取得し、ステップ4に表示され

regeneratorRuntime is not defined 

私はモカに、次のコマンドを与えるとのこと「修正」することができます - babel-polyfillが必要です。

しかし、実行するとサーバーレス展開が壊れてしまいます。

ここで私の質問は次のとおりです。これについて「正気な」方法は何ですか?可能であれば、フォルダの概要をこのように保持したいと思っています。どこに何が必要なのかを本当にはっきりと示しているので、全体像を乱雑にすることはありません。

BR、 マチュー

答えて

0

は、答えはバベルのランタイムプラグインを変換中に隠れていました。

修正.babelrcファイル:SRC/package.jsonでbabel-polyfillを添加し

{ 
    "plugins": [ 
    "transform-async-to-generator", 
    "transform-runtime" 
    ], 
    "presets": ["es2015"] 
} 

(サーバレスこれで展開する必要があるため)。

webpackをserverlessと組み合わせて使用​​するなどの代替手段は非常に推奨されません。

関連する問題