基本上,我正在使用摩根来查看开发中的日志。我在--save-dev
下有它。但是在app.js
我使用const morgan = require('morgan');
。它在我的本地机器上运行正常但我只使用morgan取决于NODE_ENV
。我怎么能认为它不会在生产中引发模块未找到的异常?我不会在那里使用它所以我在dev依赖项中有它。每次部署时是否必须手动删除该行?谢谢: - )
答案 0 :(得分:4)
您可以尝试以下内容:
if(NODE_ENV !== 'production') {
const morgan = require('morgan');
app.use(morgan(...))
}
我刚刚编写了一个类似的代码片段,并没有遇到任何问题。
答案 1 :(得分:1)
您只需通过节点提供的NODE_ENV
对象检查代码中的process.env
环境变量:
if(process.env.NODE_ENV !== 'production') const morgan = require('morgan');
答案 2 :(得分:0)
在此问题的另一个实例中,提到的某人在您使用的任何平台上(无论是Heroku,AWS还是数字海洋)创建env变量,并执行以下操作:
在heroku上:
process.env.HEROKU = true
在应用中:
if(!process.env.HEROKU){
privateData = require(url)
}
console.log(tryRequire.lastError())
答案 3 :(得分:0)
如果依赖项是作为开发依赖项安装的(不应在生产中安装),那么您还可以使用 try/catch 块有条件地导入它:
let morgan
try {
morgan = require('morgan')
} catch {}
morgan && app.use(morgan(...))
或:
try {
const morgan = require('morgan')
app.use(morgan(...))
} catch {}
这是可行的,因为该模块在生产环境中不存在,在这种情况下 require 会抛出错误