dotenv不使用serverless / webpack

时间:2018-05-09 15:41:57

标签: javascript node.js webpack environment-variables serverless-framework

编辑:如果我退出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 :(得分:0)

我找到了@apokryfos推荐的包dotenv-webpack。只需在const Dotenv = require('dotenv-webpack')中提出并将其包含在webpack.config.js

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

只需将您的.env包含在webpack.config.js的根目录中,即可在无需其他配置的任何地方声明process.env.