为什么 process.env 在模块中未定义?
Why is process.env undefined in module?
我是 nodejs 的初学者,我希望通过模块共享环境变量。我用 dotenv 包读取了这些变量。但是在下一个必需的模块中 process.env 是未定义的。
app.js
console.log(require('dotenv').config())
console.log(process.env.NODE_ENV);
require('./task')
task.js
console.log(process.env);
console.log(process.env.NODE_ENV);
.env
NODE_ENV=development
PORT=8080
控制台日志
{ parsed: { NODE_ENV: 'development', PORT: '8080' } }
development
undefined
E:\msf\nodejs_prj\compositor\task.js:2
console.log(process.env.NODE_ENV);
^
TypeError: Cannot read property 'NODE_ENV' of undefined
at Object.<anonymous> ...
我使用提供的代码创建了新的干净项目,它也适用于我。这意味着它与其他事物有关。这个node.js是关于错误的。
这是我来自 task.js
的全部代码
const fs = require('fs')
const path = require('path')
const decompress = require('decompress')
const dir = './upload'
console.log(process, process.env)
function process() {
console.log('cron - process data');
fs.readdir(dir, (err, files) => {
if (err) return
files.forEach(file => {
if (path.extname(file) != '.zip') return
let target = path.join(dir, path.basename(file).replace(path.extname(file), ''))
unlinkDirSync(target)
decompress(path.join(dir, file), target).then(files => {
console.log(files);
console.log('done!');
//todo process unzipped files
//todo delete unzipped directory and zip file
})
})
})
}
function unlinkDirSync(dir_path) {
if (fs.existsSync(dir_path)) {
fs.readdirSync(dir_path).forEach(function (entry) {
var entry_path = path.join(dir_path, entry);
if (fs.lstatSync(entry_path).isDirectory()) {
unlinkDirSync(entry_path);
} else {
fs.unlinkSync(entry_path);
}
});
fs.rmdirSync(dir_path);
}
}
if (process.env === undefined || process.env.NODE_ENV === undefined || process.env.NODE_ENV === 'production') {
console.log('starting on production')
setInterval(process, 1000 * 60)
} else {
console.log('starting on development')
setTimeout(process, 1000)
}
如果我在 console.log 之后注释掉其余部分,它会起作用。
在全局添加require('dotenv').config()。还要确保 .env 文件位于项目的根目录中。我在 github https://github.com/GMaker01/basic-dotenv-example
上创建了一个样本
作为参考,您可以查看 dotenv documentation
我是白痴。我把函数命名为process,也就是系统变量的名字:D
不好意思打扰大家,谢谢帮助。
我是 nodejs 的初学者,我希望通过模块共享环境变量。我用 dotenv 包读取了这些变量。但是在下一个必需的模块中 process.env 是未定义的。
app.js
console.log(require('dotenv').config())
console.log(process.env.NODE_ENV);
require('./task')
task.js
console.log(process.env);
console.log(process.env.NODE_ENV);
.env
NODE_ENV=development
PORT=8080
控制台日志
{ parsed: { NODE_ENV: 'development', PORT: '8080' } }
development
undefined
E:\msf\nodejs_prj\compositor\task.js:2
console.log(process.env.NODE_ENV);
^
TypeError: Cannot read property 'NODE_ENV' of undefined
at Object.<anonymous> ...
我使用提供的代码创建了新的干净项目,它也适用于我。这意味着它与其他事物有关。这个node.js是关于错误的。
这是我来自 task.js
的全部代码const fs = require('fs')
const path = require('path')
const decompress = require('decompress')
const dir = './upload'
console.log(process, process.env)
function process() {
console.log('cron - process data');
fs.readdir(dir, (err, files) => {
if (err) return
files.forEach(file => {
if (path.extname(file) != '.zip') return
let target = path.join(dir, path.basename(file).replace(path.extname(file), ''))
unlinkDirSync(target)
decompress(path.join(dir, file), target).then(files => {
console.log(files);
console.log('done!');
//todo process unzipped files
//todo delete unzipped directory and zip file
})
})
})
}
function unlinkDirSync(dir_path) {
if (fs.existsSync(dir_path)) {
fs.readdirSync(dir_path).forEach(function (entry) {
var entry_path = path.join(dir_path, entry);
if (fs.lstatSync(entry_path).isDirectory()) {
unlinkDirSync(entry_path);
} else {
fs.unlinkSync(entry_path);
}
});
fs.rmdirSync(dir_path);
}
}
if (process.env === undefined || process.env.NODE_ENV === undefined || process.env.NODE_ENV === 'production') {
console.log('starting on production')
setInterval(process, 1000 * 60)
} else {
console.log('starting on development')
setTimeout(process, 1000)
}
如果我在 console.log 之后注释掉其余部分,它会起作用。
在全局添加require('dotenv').config()。还要确保 .env 文件位于项目的根目录中。我在 github https://github.com/GMaker01/basic-dotenv-example
上创建了一个样本作为参考,您可以查看 dotenv documentation
我是白痴。我把函数命名为process,也就是系统变量的名字:D
不好意思打扰大家,谢谢帮助。