1

私はAWS Lambdaを使用しています。そのため、いくつかの最新のJavaScriptをノード6.10に移植する必要があります。ここでAWS LambdaのWebpack設定ですか?

は私のコードです:ここでは

export const handler = function(event, context, callback) { 
    console.log('Hello, world'); 
    callback(null, 'OK'); 
}; 

は、私は(大まかに)にtranspileしたいものです。

:ここ

exports.handler = function(event, context, callback) { 
    console.log('Hello, world'); 
    callback(null, 'OK'); 
}; 

は私が現在生成していますものです

module.exports = 
/******/ (function(modules) { // webpackBootstrap 
/******/ // The module cache 
/******/ var installedModules = {}; 
/******/ 
/******/ // The require function 
/******/ function __webpack_require__(moduleId) { 
/******/ 
/******/  // Check if module is in cache 
/******/  if(installedModules[moduleId]) { 
/******/   return installedModules[moduleId].exports; 
/******/  } 
/******/  // Create a new module (and put it into the cache) 
/******/  var module = installedModules[moduleId] = { 
/******/   i: moduleId, 
/******/   l: false, 
/******/   exports: {} 
/******/  }; 
/******/ 
/******/  // Execute the module function 
/******/  modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 
/******/ 
/******/  // Flag the module as loaded 
/******/  module.l = true; 
/******/ 
/******/  // Return the exports of the module 
/******/  return module.exports; 
/******/ } 
/******/ 
/******/ 
/******/ // expose the modules object (__webpack_modules__) 
/******/ __webpack_require__.m = modules; 
/******/ 
/******/ // expose the module cache 
/******/ __webpack_require__.c = installedModules; 
/******/ 
/******/ // define getter function for harmony exports 
/******/ __webpack_require__.d = function(exports, name, getter) { 
/******/  if(!__webpack_require__.o(exports, name)) { 
/******/   Object.defineProperty(exports, name, { 
/******/    configurable: false, 
/******/    enumerable: true, 
/******/    get: getter 
/******/   }); 
/******/  } 
/******/ }; 
/******/ 
/******/ // getDefaultExport function for compatibility with non-harmony modules 
/******/ __webpack_require__.n = function(module) { 
/******/  var getter = module && module.__esModule ? 
/******/   function getDefault() { return module['default']; } : 
/******/   function getModuleExports() { return module; }; 
/******/  __webpack_require__.d(getter, 'a', getter); 
/******/  return getter; 
/******/ }; 
/******/ 
/******/ // Object.prototype.hasOwnProperty.call 
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 
/******/ 
/******/ // __webpack_public_path__ 
/******/ __webpack_require__.p = ""; 
/******/ 
/******/ // Load entry module and return exports 
/******/ return __webpack_require__(__webpack_require__.s = 0); 
/******/ }) 
/************************************************************************/ 
/******/ ([ 
/* 0 */ 
/***/ (function(module, exports, __webpack_require__) { 

"use strict"; 


Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 
const handler = exports.handler = function (event, context, callback) { 
    console.log('Hello, world'); 
    callback(null, 'OK'); 
}; 

/***/ }) 
/******/ ]); 

ウェブパックの設定は次のとおりです。

const webpack = require('webpack'); 
const nodeExternals = require('webpack-node-externals'); 

const debug = process.env.NODE_ENV !== 'production'; 

module.exports = { 
    context: __dirname, 
    entry: './index.js', 
    output: { 
    path: __dirname + '/out', 
    filename: 'index.js', 
    libraryTarget: 'commonjs2' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.js$/, 
     exclude: /(node_modules|bower_components)/, 
     use: { 
      loader: 'babel-loader', 
      options: { 
      babelrc: true 
      } 
     } 
     } 
    ], 
    }, 
    target: 'node', 
    externals: [ nodeExternals() ], 
    plugins: [ 
    new webpack.optimize.DedupePlugin(), 
    new webpack.optimize.UglifyJsPlugin({ 
     mangle: !debug, 
     sourcemap: debug 
    }), 
    ], 
}; 

私もなどasync/awaitを有効にするには、.babelrcを使用しています注:

{ 
    "presets": [ 
    [ 
     "env", { 
     "targets": { 
      "node": "6.10" 
      } 
     } 
    ] 
    ], 
    "plugins": [ "transform-object-rest-spread", "transform-async-generator-functions" ] 
} 

私はこの変換を行うためにWebPACKの設定方法を教えてください。


This answerは私にとっては機能しませんでした。

+0

あなた '.babelrc'には何が? – dashmug

答えて

1

私はこの問題を解決することができました。ここで

はWebPACKの構成である:ここで

const path = require('path'); 
const webpack = require('webpack'); 
const nodeExternals = require('webpack-node-externals'); 

const debug = process.env.NODE_ENV !== 'production'; 

module.exports = { 
    context: __dirname, 
    entry: './index.js', 
    output: { 
    path: path.join(__dirname, 'out'), 
    filename: 'index.js', 
    library: "index", 
    libraryTarget: 'commonjs2' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.js$/, 
     exclude: /(node_modules|bower_components)/, 
     use: { 
      loader: 'babel-loader', 
      options: { 
      babelrc: true 
      } 
     } 
     } 
    ], 
    }, 
    target: 'node', 
    externals: [ nodeExternals() ], 
    plugins: [ 
    new webpack.optimize.UglifyJsPlugin({ 
     mangle: !debug, 
     sourcemap: debug 
    }), 
    ], 
}; 

は、AWSラムダに送られるバンドルを作るための私のコマンドです:

zip -j out.zip ./out/index.js 

-j設定に注意してください。これは、zip内のファイルからパスを削除します。

ので、出力は次のようになります。

+ out.zip 
+--+ index.js 

そしてません:

+ out.zip 
+--+ out 
    +--+ index.js 
+1

webpack設定で何を修正しましたか?おそらく大胆になっていますので、はっきりしています。 –

+0

'output.library'を追加し、私のパッケージングスクリプトを修正しました。 – sdgfsdh