dotenv не работает с serverless / webpack - PullRequest
0 голосов
/ 09 мая 2018

РЕДАКТИРОВАТЬ: Если я выйду из системы dotenv.config() я получаю ошибку: Error: ENOENT: no such file or directory, open '/Users/myPathToApplication/.webpack/test/.env'

Я собираю свой серверный обработчик для использования кода es6 / es7. У меня есть env переменные, которые я тоже пытаюсь использовать. Проблема в том, что dotenv не работает, когда я связываю обработчик.

Например, одна из утилит, которую я использую, подключает mongoose к моему приложению. Здесь я храню DB_URI как переменную env. импортировать envdotjs из 'envdotjs';

import mongoose from 'mongoose';
mongoose.Promise = global.Promise;
require('dotenv').config();
let isConnected;

const connectToDatabase = () => {
  if (isConnected) {
    console.log('=> using existing database connection');
    return Promise.resolve();
  }
  console.log('=> using new database connection');
  return mongoose.connect(process.env.DB_URI).then(db => {
    isConnected = db.connections[0].readyState;
  });
};

module.exports = {
  connectToDatabase
};

Однако DB_URI не определен, и код ломается.

Вот мой веб-пакет:

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

module.exports = {
  entry: slsw.lib.entries,
  target: 'node',
  devtool: 'source-map',
  externals: [nodeExternals()],
  mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: __dirname,
        exclude: /node_modules/
      }
    ]
  }
};

Я запускаю это для того, чтобы использовать es6 / 7 на безсерверном обработчике, который работает просто отлично. Но переменные env ломаются. Я также попытался использовать модуль с именем envdotjs и получил те же результаты, что переменные env не определены, поэтому я не думаю, что это проблема с dotenv.

1 Ответ

0 голосов
/ 09 мая 2018

Я нашел пакет dotenv-webpack, также рекомендованный @apokryfos.Просто потребуйте его в const Dotenv = require('dotenv-webpack') и включите его в webpack.config.js.

module.exports = {
...
  plugins: [new Dotenv()]
}

Просто включите ваш .env в корень вместе с webpack.config.js, и вы можете объявить свой process.env. где угоднобез других настроек.

...