node 项目环境变量兼容及入口分离

对于跨平台来说,环境变量设置是个大坑,这篇文章来讲讲如何剥离环境变量依赖以及入口文件分离问题。

一切从应用的入口开始

{
  "name": "demo",
  "scripts": {
    "dev": "NODE_ENV=development node bin/www",
    "start": "NODE_ENV=production node bin/www",
  }
}

假设我们有一个 express 项目,这是我们的开发和启动配置。

在 linux/mac 下妥妥的,可 win 下就挂了,因为 win 的环境变量不是这样设置的。

于是乎我们引入一个 cross-env
模块,然后配置如下。

{
  "name": "demo",
  "scripts": {
    "dev": "cross-env NODE_ENV=development node bin/www",
    "start": "cross-env NODE_ENV=production node bin/www",
  }
}

问题解决了,皆大欢喜,文章结束。。

咳咳,,等等,这不是我要说的东西。

入口分离

我比较喜欢用入口分离来处理跨平台问题,简单的兼容性基本都可以靠编程来解决。

{
  "name": "demo",
  "scripts": {
    "dev": "node bin/dev",
    "other": "node bin/other", // 其他脚本,如编译,清理,同步等
    "start": "node bin/www",
  }
}

这样不是更好么,然后在对应的入口脚本里写环境变量即可,而且可以针对开发,发布环境,加入不同的初始化代码。

例如: bin/dev
文件:

#!/usr/bin/env node

// 开发环境变量
process.env.NODE_ENV = 'development';

// mock api接口
process.env.WEB_API_STATE = 'mock';

// 调试/报错 支持map 
require('source-map-support/register');

// 剩下其他代码一样

在保证启动代码一致的情况下,可以做很多开发环境优化,再也不用在入口文件加入各种判断处理,何乐而不为呢?

小节

手头一堆老项目,各种蛋疼的初始化,各种判断,各种繁琐的处理,所以自己摸索了这个方式方便分离各种环境。

说不定大神们早就这么用了,只是我们这些渣渣不知道而已。

稿源:楼教主 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » node 项目环境变量兼容及入口分离

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录

登录

忘记密码 ?

切换登录

注册