2016-12-14 59 views
1

我最近使用.env文件设置了一个简单的项目,并在我的代码中用process.env。[变量名称]调用了env变量,它完全可以工作,不需要将dotenv包添加到我的项目中。Dotenv仍然是6.x.x节点的必备软件包吗?

节点是否并入了本机?我尝试了谷歌搜索,但它没有提供任何有用的信息,所以我有点困惑。认为这很容易确认或否认。

这里是我的 '应用':

// Load the SDK and UUID 
 
var AWS = require('aws-sdk'); 
 
var uuid = require('node-uuid'); 
 

 
// Create an S3 client 
 
var s3 = new AWS.S3({ 
 
    region: 'us-east-1', 
 
    accessKeyId: process.env.AWS_ACCESS_KEY_ID, 
 
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY 
 
}); 
 

 
// Create a bucket and upload something into it 
 
var bucketName = 'node-sdk-sample-' + uuid.v4(); 
 
var keyName = 'hello_colorado.txt'; 
 

 
s3.createBucket({Bucket: bucketName}, function() { 
 
    var params = {Bucket: bucketName, Key: keyName, Body: 'Coloradoical!'}; 
 
    s3.putObject(params, function(err, data) { 
 
    if (err) 
 
     console.log(err) 
 
    else 
 
     console.log("Successfully uploaded data to " + bucketName + "/" + keyName); 
 
    }); 
 
});

而我的package.json(不dotenv):

{ 
    "dependencies": { 
     "aws-sdk": ">= 2.0.9", 
     "node-uuid": ">= 1.4.1" 
    } 
} 

只是一个想法,可以说,它是关系到事实上,我正在从node simple.js的命令行运行我的应用程序?如果是这样,你能解释为什么吗?

+0

不是我意识到的,我几乎在每个项目中都使用'.env'文件。我认为当你认为它没有添加软件包的时候,可能会有其他的东西在起作用。 – dvlsg

+0

嗯我会倾向于相信你,但我的'应用程序'是简单的。将发布它的全部以及我的package.json – maxwell

+0

请确保您没有任何全局定义的环境变量,或终端启动应用程序。不能为你说话,但我以前肯定犯过这个错误。 – dvlsg

回答

2

不,Node.js不会自动读取.env文件。

对正在发生的事情可能的解释:

  • 也许你正在使用已经在你的shell设置运行程序前的环境变量。

  • 也许您的AWS证书正在被您的机器以某种其他方式存储/使用。 (根据我们的评论对话,这看起来像你的情况,但我包括其他的东西,以通常帮助其他人可能会看到类似的东西。)

  • 也许你正在加载的模块之一是阅读.env文件。


从@maxwell

建议的其他信息:

AWS CLI帮助页面表明,对于配置值的优先顺序是:

  • 命令行选项
  • 环境变量
  • 配置文件

这听起来像是信息来自@maxwell的配置文件。

+0

是的 - 第二个是答案。也许在aws cli帮助页面中找到我刚刚找到的这一行,并回答你的答案。 ' 优先 以上配置值有下列优先顺序: O命令行选项 O环境变量 O配置文件 ' – maxwell

+0

添加的信息,谢谢。看看,让我知道如果我搞砸了。 – Trott

+0

对我来说很不错。 – maxwell