1029mysql_1029 - SegmentFault 思否

背景

使用Taro进行小程序的开发,调用后端api获取信息,开发,测试,正式环境的域名是不同的。最初始的版本中,我们在不同环境中不断修改域名信息。这样造成一个问题,提交审核的时候我们一定要记得将域名改成正式版,不然会出现问题。这种人为控制,显然不能保证百分百没有问题。我们就考虑是不是可以通过process.env来区分不同的环境

尝试使用process.env解决问题

修改配置文件

原配置文件export const baseUrl = 'https://release.com/';

修改后配置文件let baseUrlPrefix = ''

const env = process.env.NODE_ENV === 'development' ? 'development' : 'production'

console.log(process.env.NODE_ENV)

switch (env) {

case 'development':

baseUrlPrefix = 'http://dev.com/'

break

case 'production':

baseUrlPrefix = 'https://release.com/'

break

}

export const baseUrl = baseUrlPrefix

执行命令查看

执行命令npm run dev:weapp

发现控制台输出的process.env.NODE_ENV=development

执行命令npm run build:weapp

发现控制台输出的process.env.NODE_ENV=production

执行结果说明一个问题,我们是可以通过process.env进行判断的开发环境和正式环境

那么我们遗留下来一个问题:测试环境怎么办?

测试环境怎么设置

执行npm run dev和build的区别

查看package.json文件"scripts": {

"build:weapp": "taro build --type weapp",

"dev:weapp": "npm run build:weapp -- --watch"

}

可以看出,dev和build的差别就是--watch,那么是不是--watch设置的process.env?

--watch为什么使process.env=development

查看源码 taro-buildprogram

.option('--type [typeName]', 'Build type, weapp/swan/alipay/tt/h5/quickapp/rn/qq/jd')

.option('--watch', 'Watch mode')

.option('--page [pagePath]', 'Build one page')

.option('--component [pagePath]', 'Build one component')

.option('--env [env]', 'Env type')

.option('--ui', 'Build Taro UI library')

.option('--ui-index [uiIndexPath]', 'Index file for build Taro UI library')

.option('--plugin [typeName]', 'Build Taro plugin project, weapp')

.option('--port [port]', 'Specified port')

.option('--release', 'Release quickapp')

.parse(process.argv)

const { type, watch, ui, port, release, page, component, uiIndex } = program

let { env, plugin } = program

env = process.env.NODE_ENV || env

if (env) {

process.env.NODE_ENV = env

} else {

if (watch) {

process.env.NODE_ENV = 'development'

} else {

process.env.NODE_ENV = 'production'

}

}

这里可以看到当env不存在的时候,如果执行参数里面有watch就设置process.env.NODE_ENV = 'development',否则就是'production'。

到这里你是不是发现了什么端倪?

端倪

除了--watch之外,taro执行build命令的时候还接受一个参数--env,设置当前所在环境的,那么我们的测试环境是不是可以通过这个参数设置来实现呢?

我们来修改一下package.json"scripts": {

"build:weapp": "taro build --type weapp",

"dev:weapp": "npm run build:weapp -- --watch",

"test:weapp": "npm run test:weapp -- --watch --env test"

}

修改配置文件let baseUrlPrefix = ''

const env = process.env.NODE_ENV === 'development' ? 'development' : (process.env.NODE_ENV === 'test' ? 'test' : 'production')

console.log(process.env.NODE_ENV)

switch (env) {

case 'development':

baseUrlPrefix = 'http://dev.com/'

break

case 'test':

baseUrlPrefix = 'https://test.com/'

break

case 'production':

baseUrlPrefix = 'https://release.com/'

break

}

export const baseUrl = baseUrlPrefix

执行命令npm run test:weapp

想象一下打印出来的process.env.NODE_ENV是什么?

发生了什么?

process.env.NODE_ENV = 'production',为什么?

我们来看看我们的应用的config文件夹里面的index.js做了什么module.exports = function (merge) {

if (process.env.NODE_ENV === 'development') {

return merge({}, config, require('./dev'))

}

return merge({}, config, require('./prod'))

}

我们设置的process.env.NODE_ENV应该是test,走到这里webpack的配置文件使用的是prod的配置,我们看看prod.js里面写了什么module.exports = {

env: {

NODE_ENV: '"production"'

},

defineConstants: {

},

mini: {},

h5: {

/**

* 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。

* 参考代码如下:

* webpackChain (chain) {

* chain.plugin('analyzer')

* .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])

* }

*/

}

}

看到了吗,这里把NODE_ENV又重置成了production,我们来尝试调整

增加test配置

增加test.js配置在config文件夹中module.exports = {

env: {

NODE_ENV: '"test"'

},

defineConstants: {

},

mini: {},

h5: {}

}

修改index.jsmodule.exports = function (merge) {

if (process.env.NODE_ENV === 'development') {

return merge({}, config, require('./dev'))

} else if (process.env.NODE_ENV === 'test') {

return merge({}, config, require('./test'))

}

return merge({}, config, require('./prod'))

}查看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值