Использовать существующие node_modules во время бессерверного развертывания с использованием serverless-webpack

#node.js #amazon-web-services #webpack #serverless #serverless-webpack-plugin

#node.js #amazon-веб-сервисы #webpack #бессерверный #бессерверный webpack-плагин

Вопрос:

Я работаю над приложением узла с использованием serverless архитектуры. Мы используем serverless-webpack плагин для сборки приложения. Вот webpack.config.js

 module.exports = {
  mode: isLocal ? 'development' : 'production',
  entry: slsw.lib.entries,
  externals: [nodeExternals()],
  devtool: 'inline-cheap-module-source-map',
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.ts', '.tsx']
  },
  output: {
    libraryTarget: 'commonjs2',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js'
  },
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
  target: 'node',
  module: {
    rules: [{
        test: /.ts$/,
        exclude: /node_modules/,
        loader: 'ts-loader',
        options: {
          // disable type checker - we will use it in fork plugin
          transpileOnly: true
        }
      },
      {
        test: /.(graphql|gql)$/,
        exclude: /node_modules/,
        loader: 'graphql-tag/loader',
      }
    ]
  },
  // plugins: [new ForkTsCheckerWebpackPlugin()]
};
  

и вот serverless.yml файл :

 service: app
provider:
  name: aws
  region: ${env:AWS_REGION}
  stage: ${env:STAGE}
  logRetentionInDays: 90
  role: ${env:ROLE}
  versionFunctions: false
  runtime: nodejs12.x

package:
  individually: true

plugins:
- serverless-webpack
- serverless-offline

custom:
  webpack:
    webpackConfig: './webpack-gql.config.js'
    packager: 'npm'
    includeModules: true

functions:
  ######## GraphQl ###########
  graphql:
    role: ${env:ROLE}
    runtime: nodejs12.x
    timeout: 30
    handler: aws/lambda/common/api/graphql.graphqlHandler
 
    events:
      - http:
          path: graphql
          method: post

      - http:
          path: graphql
          method: get
  

Когда я запускаю sls deploy --config serverless.yml развертывание приложения, все работает, и лямбда-модуль успешно развертывается.
Единственное, что происходит в процессе развертывания, это повторное использование package-lock.json и установка использованных пакетов :

 Serverless: Package lock found - Using locked versions

Serverless: Packing external modules:  graphql-compose@^7.19.3, linewrap@^0.2.1, d64@^1.0.0, graphql-scalars@^1.2.6, graphql-tools@^6.0.12

Serverless: Packaging service...
  

Мой вопрос заключается в том, как прекратить повторный запуск установки npm во время развертывания, вместо этого он должен использовать существующий node_moudles при упаковке внешних модулей.
Кто-нибудь может мне помочь в этом. ?

Комментарии:

1. Попробуйте удалить exclude: /node_modules/, из правил в вашем webpack.config.js . Есть ли причина, по которой вы хотите, чтобы все ваши node_modules файлы были в пакете? Это может привести к тому, что ваш бессерверный пакет будет огромным, поскольку теперь он включает все пакеты npm. Я бы определенно не рекомендовал это.

2. @ultimoTG Нет, чего я хочу, так это node_modules того, что пакеты должны быть повторно установлены при упаковке.