Загрузите нативный пакет npm x509 с помощью веб-пакета в режиме без сервера - PullRequest
0 голосов
/ 05 мая 2018

Я тестирую функции aws iot, используя безсерверный фреймворк. Таким образом, для одного случая использования я не должен был анализировать сертификаты x509, которые iot устройства регистрируют в aws от aws lambdas, я увидел пакет npm с именем x509, чтобы сделать это легко. Это нативный пакет, поэтому я собираю его в 64-битной версии Ubuntu, чтобы сделать его совместимым со средой aws.

Проблема в том, что веб-пакет не идентифицирует этот пакет npm даже после импорта моего пакета.

Ошибка, которую он говорит,

$ sls package

Serverless: Bundling with Webpack... Time: 245ms Built at: 05/05/2018 11:04:55 AM
                       Asset      Size  Chunks             Chunk Names
               jitr/index.js  11.9 KiB       0  [emitted]  jitr/index jitr/build/Release/x509.node  44.2 KiB          [emitted] Entrypoint jitr/index = jitr/index.js [0] ./jitr/index.js 7.39 KiB {0} [built] [1] external "aws-sdk" 42 bytes {0} [built] [2] ./jitr/node_modules/x509/index.js 1.29 KiB {0} [built] [3] external "fs" 42 bytes {0} [built]

ERROR in ./jitr/node_modules/x509/index.js Module not found: Error: Can't resolve './build/Release/x509' in '/home/serverless/jitr/node_modules/x509'  @ ./jitr/node_modules/x509/index.js 1:11-42  @ ./jitr/index.js

  Error --------------------------------------------------

  Webpack compilation error, see above

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Forums:        forum.serverless.com
     Chat:          gitter.im/serverless/serverless

  Your Environment Information -----------------------------
     OS:                     linux
     Node Version:           8.10.0
     Serverless Version:     1.26.1

Моя структура dir пакета,

- myproject
-- webpack.config.js
-- serverless.yml
-- jitr
--- index.js <- Here I'm importing x509
--- node_modules
---- x509
----- index.js <- First line: var x509 = require('./build/Release/x509')
----- build/Release/x509.node

Файл конфигурации моего веб-пакета

const path = require("path");
const slsw = require("serverless-webpack");
const nodeExternals = require("webpack-node-externals");
const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
    entry: slsw.lib.entries,
    target: "node",
    output: {
        libraryTarget: "commonjs2",
        path: path.resolve(__dirname, ".webpack"),
        filename: "[name].js"
    },
    module: {
        rules: [
            {
                test: /\.json$/,
                loader: "json-loader"
            },
            {
                test: /\.node$/,
                loader: "node-loader"
            }
        ]
    },
    mode: "none",
    externals: [
        nodeExternals({
            whitelist: ["x509"]
        })
    ],
    plugins: [
        new CopyWebpackPlugin([
            {
                from: "jitr/node_modules/x509/build/Release/x509.node",
                to: "jitr/build/Release/x509.node",
                toType: "file"
            }
        ])
    ]
};

Что может быть не так? Я искал дополнительные этапы отладки при выполнении команды webpack, но здесь я использую безсерверный плагин с именем serverless-webpack для упаковки и развертывания лямбд.

У Aws lambda есть доступ к необработанной команде openssl, если ничего не работает, я должен использовать эту команду из nodejs для выполнения этих действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...