js怎么优雅的实现参数的传递覆盖?
类似于patch请求,我传递了值的参数就覆盖,没有传递值就默认.
目前写的是ifelse判断 感觉太僵硬了
现在的条件判断是 :当前不传参 就给HOST默认值
传参(hsot),就把host赋值给HOST
设想一种情况:要传多个参数值:arg1,arg2,arg3
arg1,arg2我传了值,arg3没传递,按照现在的ifelse逻辑就会报错
怎么优雅的实现参数赋值?
大佬们给点意见
js怎么优雅的实现参数的传递覆盖?
类似于patch请求,我传递了值的参数就覆盖,没有传递值就默认.
目前写的是ifelse判断 感觉太僵硬了
现在的条件判断是 :当前不传参 就给HOST默认值
传参(hsot),就把host赋值给HOST
设想一种情况:要传多个参数值:arg1,arg2,arg3
arg1,arg2我传了值,arg3没传递,按照现在的ifelse逻辑就会报错
怎么优雅的实现参数赋值?
大佬们给点意见
const npmArgs = process.argv.slice(2),
paramsMap = Object.assign(
{
host: 'fl.zh',
host2: 'fl.cs'
},
npmArgs && npmArgs[0] && require('minimist')(npmArgs) || {}
);
module.exports = {
NODE_ENV: '"cus"',
BASE_URL: '"//' + paramsMap.host + '"',
}
浅层object合并可以考虑用assign设置默认值
const arg1 = nameArgs[0] ? nameArgs[0] : '默认值'
const arg2 = nameArgs[1] ? nameArgs[0] : '默认值'
const arg3 = nameArgs[2] ? nameArgs[0] : '默认值'
拆分成函数
const npmArgs = procces.argv.slice(2)
const HOST = npmArgs.length > 0 ? getHost(npmArgs) : 'fl.zh'
const getHost = function(args) {
let minimist = require('minimist')
let newArgs = minimist(args)
return newArgs.host
}
谢谢大家踊跃发言,我自己写了一个paramMap,大家看看有木有问题?
目前是实现了需求,o( ̄︶ ̄)o 当然,大家的意见我会挨个挨个的查看,参考,评价
'use strict'
const npmArgs = process.argv.slice(2)
//低仿patch
const paramsMap = {
host: 'fl.zh',
host2: 'fl.cs'
}
var HOST
var HOST2
if (!npmArgs) {
HOST = paramsMap.host;
HOST2 = paramsMap.host2;
console.log(`项目正常打包地址:${HOST}`)
}
else {
var minimist = require('minimist');
var args = minimist(npmArgs);
HOST = args.host || paramsMap.host
HOST2 = args.host2 || paramsMap.host2
console.log(`HOST:${HOST},HOST2:${HOST2}`);
}
module.exports = {
NODE_ENV: '"cus"',
BASE_URL: '"//' + HOST + '"',
}
运行命名后process.env.argv数据如下
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答4.9k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
一些个人见解:
ES5 版本类似于:
ES6 以上的版本写起来就更方便了,但是缺少类型断言:
Ts 则有类型断言,可以在编译时发现错误: