NodeJS仅在未生产时导入

时间:2018-01-18 04:59:23

标签: node.js

基本上,我正在使用摩根来查看开发中的日志。我在--save-dev下有它。但是在app.js我使用const morgan = require('morgan');。它在我的本地机器上运行正常但我只使用morgan取决于NODE_ENV。我怎么能认为它不会在生产中引发模块未找到的异常?我不会在那里使用它所以我在dev依赖项中有它。每次部署时是否必须手动删除该行?谢谢: - )

4 个答案:

答案 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 会抛出错误