这里的文件的作用是负责设置env环境变量和日志。

index.js

try {
require('dotenv').load({silent: true});
//dotenv从一个.env文件中读取环境变量到process.env中
//process.env会返回一个所有环境变量的对象
} catch (error) {
console.log('没有.env文件,将会从 process.env 中读取');
} var extend = require('util')._extend;
//util._extend(target, source)此方法不稳定,请使用Object.assign()代替
//Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
var config = {};
var env = process.env.NODE_ENV; if (!(/^(dev)|(prod)|(test)|(staging)$/).test(env)) {
console.log('请先设置当前项目的运行环境 ' +
'\n dev(开发) 或者 prod(生产) 或者 test(跑单元测试) 或者 staging(测试环境/仿真环境)' +
'\n 设置方式可为设置环境变量 NODE_ENV=环境名称,或者在项目根目录下新建一个 .env 文件 在里面写上一行代码 NODE_ENV=环境名称' +
'\n 格式(环境变量名称=值【没有引号】),比如 NODE_ENV=dev ');
process.exit(1); //process.exit(code)尽可能快的停止node服务
} switch (env) { //根据环境,将base基础环境变量导入相应文件中
case 'dev':
config = extend(require('./env/dev'), require('./env/base'));
break;
case 'test':
config = extend(require('./env/test'), require('./env/base'));
break;
case 'prod':
config = extend(require('./env/prod'), require('./env/base'));
break;
case 'staging':
config = extend(require('./env/staging'), require('./env/base'));
break;
} var reWrittenEnv = function (config) { //将env对象变成字符串存入envList数组
var envList = [];
for (var o in config) {
envList[envList.length] = o + '=' + config[o] + '\n';
}
}; if (env !== 'test') {
reWrittenEnv(config);
} for (var o in config) { //将env存入global和process.env中
global[o] = config[o]; //global是node中的全局变量
process.env[o] = config[o];
} exports.staus = true;

log4js.js

var log4js = require('log4js'); //日志

var logParams = {
replaceConsole: false
}; //是否取代console.log if (global.LOG_PRINT == 1) { //appender中配置两个输出,一个输出info日志,一个输出error日志
logParams.appenders = [
{
type: 'dateFile', //文件类型
absolute: true, //文件名路径是否绝对
filename: 'log/info.log', //文件名
maxLogSize: 1024 * 1024, //单文件最大,若设置了模式符,则单文件最大失效
pattern: '-yyyy-MM-dd', //模式符,日期
alwaysIncludePattern: true, //总是添加模式符
category: 'info' //设置一个类型,和log4js.getLogger('category')里的类型相对应
},
{
type: 'dateFile',
absolute: true,
filename: 'log/error.log',
maxLogSize: 1024 * 1024,
pattern: '-yyyy-MM-dd',
alwaysIncludePattern: true,
category: 'error'
}
];
} else {
logParams.appenders = [
{ type: 'console' } //控制台
]
} log4js.configure(logParams); var logInfo = log4js.getLogger('info');
var logError = log4js.getLogger('error'); module.exports = {
logInfo: logInfo,
logError: logError
};

base.js

base.js、dev.js、prod.js、staging.js、test.js分别是不同环境下必须的环境变量,写法都一样。

var env = require('../../tool');

module.exports = {
PORT: env.port('PORT', 3000), //端口
NODE_ENV: env.name('NODE_ENV'), //环境
STATIC_DIR: env.string('STATIC_DIR', 'public'), //静态文件路径
STATIC_URL: env.staticUrl('STATIC_URL', ''),
STATIC_FILES_OUTPUT: env.string('STATIC_FILES_OUTPUT', 'assets'), //静态文件输出地址
SITE_TITLE: env.string('SITE_TITLE', 'crazyxia'), //网站title
};

express+gulp构建项目(四)env环境变量的更多相关文章

  1. express+gulp构建项目(二)启动项目和主文件

    这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ...

  2. express+gulp构建项目(一)项目目录结构

    express是基于nodejs平台的web框架,它可以让我们快速开发出web引用.而gulp是一种自动构建工具,非常强大,有了它,能帮我们完成很多繁琐的工作,例如,静态文件的压缩,为静态文件加上哈希 ...

  3. express+gulp构建项目(五)swig模板

    这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...

  4. express+gulp构建项目(三)gulp任务

    这次来看一看gulp是怎么工作的. tasks/paths.js paths.js文件里存放的是gulp任务中需要导入的文件的路径和导出的路径. /** * gulp.src 地址 * gulp.de ...

  5. K8s中,tomcat的一部分jvm参数,如何通过env环境变量传递?

    这两天解决的一个需求: 如果用户没有在deployment中设置env参数,则tomcat默认使用1G左右的内存: 如果用户在deployment中提供了jvm参数,则tomcat将这部分的参数,覆盖 ...

  6. Linux下发布javaWeb项目,配置环境变量,tomcat,和安装mysql数据库

    如果不懂,可以联系微博本人:QQ:3111901846 (原创) 1.配置java中jdk 注意一切操作,都是在root这个目录下进行的,不要选择其他目录,不然会出现一些小问题的 第一步: 你需要一个 ...

  7. perl 对ENV环境变量的使用

    1.hash 方式访问. %ENV  key为环境变量名,value为环境变量值 2.调用ENV模块 . use Env qw(PATH); print "path is $ENV{path ...

  8. readonly&&declare&&unset &&export&&env环境变量

    readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ...

  9. ROS学习笔记(四)——环境变量配置

    1.查看环境变量配置情况,其实并没有什么卵用 $ export | grep ROS 或者用 $ printenv | grep ROS2.配置环境变量??$ source /opt/ros/indi ...

随机推荐

  1. VS2015解决非Unicode编码包含中文字段无法编译的问题

    用VS2015打开并编译,定位到编译错误的文件(.cs而不是可视化编辑视图) 文件--高级保存选项--编码 改为 Unicode-代码页1200 这样不论用VS2015/2013/2012/2010 ...

  2. ASP.NET导出文件FileResult的使用

    本文给大家讲一下ASP.NET MVC中如何使用FileResult来导出文件,首先网上相关例子有很多大神都有讲,我在这只是稍微说一点不同——为什么我的导出没有反应呢? 这个问题,我找了半天也没有找到 ...

  3. IOS 7 风格Checkbox

    Switchery Switchery is a simple component that helps you turn your default HTML checkbox inputs into ...

  4. “You couldn’t see my tears cause I am in the water.“ Fish said to water.“But I could feel your tears cause you are in my heart..“ Answered water.

    “You couldn’t see my tears cause I am in the water.“ Fish said to water.“But I could feel your tears ...

  5. QDataStream和QByteArray

    一个写操作可以参考: QDataStream &operator >>(QDataStream &in, SerializedMessage &message) { ...

  6. webstorm IDE添加Plugins----添加vue插件

    webstorm IDE很强大了,扩展性很强,语法校验很强大,不过有时候一些特殊的插件  还是需要自己添加到IDE的 下面以添加VUE Plugins 为例: Setting--Plugins[点下方 ...

  7. stm8的IIC库的使用

    一.前言 stm8是一款低功耗的MCU芯片,它具备stm32库函数和资源丰富的优势.也同时具有价格便宜,低功耗的特点.在一些项目中,能起到很好的作用.下面我介绍一下stm8的IIC硬件库函数驱动代码及 ...

  8. PowerShell添加或修改注册表开机启动项脚本

    代码如下: $name = Read-Host "请输入开机启动项的名字(随便起)" $value = Read-Host "请输入开机启动项的值" try{ ...

  9. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

  10. 【leetcode❤python】 303. Range Sum Query - Immutable

    #-*- coding: UTF-8 -*- #Tags:dynamic programming,sumRange(i,j)=sum(j)-sum(i-1)class NumArray(object) ...