通过解析路由,生成授权文件
使用npm安装:
$ npm install vve-router-auth-cli
在package.json添加
"scripts": {
"router-auth-cli": "vve-router-auth-cli"
}
然后 npm run vve-router-auth-cli
program
.version(require('../package.json').version)
.option("--cwd <path>", "工作目录")
.option("--root-dir <path>", "项目所在的根目录")
.option(
"--config <path>",
"配置文件的路径,没有配置,默认路径是在${cwd}/vve-router-auth-cli.config.js"
)
.option("--disable-config-file", "是否取配置文件")
.parse(process.argv);
默认配置文件在${cwd}/vve-router-auth-cli.config.js,样例内容如下所示
module.exports = {
rootDir: 'src'
}
const config = {
// 工作目录
cwd: ".",
// 根目录,项目所在
rootDir: "src",
// 路由文件规则
routerFileRules: ["router.js"],
// 不匹配的路由文件规则
ignoreRouterFileRules: [],
// 文件的alias,同webpack配置
alias: {},
// 文件的extensions,同webpack配置
extensions: ['.vue', '.js'],
//所有的路由都加上这个前缀
routerBase: '',
// 父亲路由的前缀,相对路径都加上这个
parentRouterBase: '',
// router文件扩展{ urlPath: '', componentPath: '' },
routerExtends: [],
// 忽略的路由path规则,完整的路径地址
ignoreUrlPaths: [],
// 忽略的导入的文件规则,其文件内部import文件也将被忽略
ignoreImportFileRules: [],
// auth扩展{ [urlPath]: [{ functionName: '', functionKey: '' }] },
authExtends: {},
// 不匹配的authCode规则
ignoreAuthCodeRules: [],
// authCode和名称强制映射 { code: name }
authCodeNameMap: {},
// 自定义忽略被分析的内容,需要包含三个group,前中后
customIgnoreWrap: [
],
// 忽略被包裹,需要包含三个group,前中后
ignoreWrap: [
{ name: 'singleLineComment', regex: /(\/\/)([\s\S]*?)(\n)/g },
{ name: 'multiLineComment', regex: /(\/\*)([\s\S]*?)(\*\/)/g },
{ name: 'htmlComment', regex: /(<\!--)([\s\S]*?)(-->)/g },
],
// 忽略禁用包裹,需要包含三个group,前中后
ignoreDisableWrap: [
{ name: 'disableLine', regex: /(\n|^)(.*)(\/\/(?:[^\S\r\n]*|.*[^\S\r\n]+)vve-router-auth-disable-line(?:[^\S\r\n]*|[^\S\r\n]+.*))/g },
{ name: 'disableNextLine', regex: /(\/\/(?:[^\S\r\n]*|.*[^\S\r\n]+)vve-router-auth-disable-next-line(?:[^\S\r\n]*|[^\S\r\n]+.*)\n)(.+)(\n|$)/g },
{ name: 'disableWrap', regex: /(\/\*\s*vve-router-auth-disable\s*\*\/)([\s\S]*?)((?:\/\*\s*vve-router-auth-enable\s*\*\/)|$)/g }
],
// 路由菜单key映射扩展
routerMenuExtends: {
data: [], // [{ url: '', functionKey: '' }]
urlKey: 'url',
menuFunctionKey: 'functionKey'
},
// output输出信息,根据参考的菜单文件输出对应的文件
// [{ menuFilePath: '', mergeIntoMenuFile: false, unKeepEmptyVAuthListKey: false, outFilePath: '', props: {} }]
// menuFilePath 参考的菜单文件,
// outFilePath 输出的文件,只生成url有值的菜单,扁平化生成,不保留菜单层级结构
// mergeIntoMenuFile 直接合并到菜单文件,默认合并到vAuthList的key中,此时outFilePath无效,当outFilePath与menuFilePath路径相同,等同次参数效果
// mergeIntoMenuChildren 是否合并到菜单的children中,此时不再合并到menuVAuthList对应的key中
// unKeepMenuWhenAuthIsEmpty 当是否vAuthList为空是否保留菜单,默认保留,当mergeIntoMenuFile为true时,此参数无效
// shouldParentKeyAsPrefix 是否将父级菜单的key作为前缀,默认false
// separatorBetweenParentKeyAndChildKey 父级菜单的key和子级菜单的key之间的分隔符,默认为'_',当shouldParentKeyAsPrefix为false时,此参数无效
// props 属性映射
// vAuthFunctionName: 'functionName',
// vAuthFunctionKey: 'functionKey',
// vAuthOperationType: 'operationType',
// vAuthList: 'vAuthList',
// menuFunctionName: 'functionName',
// menuFunctionKey: 'functionKey',
// menuChildren: 'children',
// menuUrl: 'url',
// menuVAuthList: 'vAuthList',
output: [],
// 配置文件的路径,没有配置,默认路径是在${cwd}/vve-router-auth-cli.config.js
config: undefined,
// 是否取配置文件
disableConfigFile: false,
// 解析脚本中的authCode
parseAuthInScript: false,
// 解析vAuth用到参数
vAuthParams: {
authAttrList: [
'v-auth',
'v-permission'
],
vAuthValueAttrList: [
'data-v-auth-value'
],
vAuthNameAttrList: [
'data-auth-name'
],
vEffectiveKeyList: [
'effective-key'
],
vAuthOperationTypeAttrList: [
'data-auth-operation-type'
],
vAuthValueRegList: [
/^'([a-zA-Z0-9_$]+)'/,
/^"([a-zA-Z0-9_$]+)"/,
],
// 属性valueStr的正则
attrValueRegList: [
/^'(.+)'/,
/^"(.+)"/,
/\$t\('(.+)'\)/,
/\$t\("(.+)"\)/
],
// 属性valueStr的正则
innerTextValueRegList: [
/\$t\('(.+)'\)/,
/\$t\("(.+)"\)/,
/([a-zA-Z0-9_\u4e00-\u9fa5]+)/,
],
// 属性authCode的正则
authCodeRegList: [
/authCode\s*:\s*'(.+)'/,
/authCode\s*:\s*"(.+)"/,
],
// 属性authCode的正则
authCodeNameRegList: [
/vAuthTitle\s*:\s*'(.+)'/,
/vAuthTitle\s*:\s*"(.+)"/,
/vAuthTitle\s*:.+\$t\("(.+)"\)/,
/vAuthTitle\s*:.+\$t\('(.+)'\)/,
/text\s*:\s*'(.+)'/,
/text\s*:\s*"(.+)"/,
/text\s*:.+\$t\("(.+)"\)/,
/text\s*:.+\$t\('(.+)'\)/,
/label\s*:\s*'(.+)'/,
/label\s*:\s*"(.+)"/,
/label\s*:.+\$t\("(.+)"\)/,
/label\s*:.+\$t\('(.+)'\)/,
/name\s*:\s*'(.+)'/,
/name\s*:\s*"(.+)"/,
/name\s*:.+\$t\("(.+)"\)/,
/name\s*:.+\$t\('(.+)'\)/,
/title\s*:\s*'(.+)'/,
/title\s*:\s*"(.+)"/,
/title\s*:.+\$t\("(.+)"\)/,
/title\s*:.+\$t\('(.+)'\)/,
/originTitle\s*:\s*'(.+)'/,
/originTitle\s*:\s*"(.+)"/,
/originTitle\s*:.+\$t\("(.+)"\)/,
/originTitle\s*:.+\$t\('(.+)'\)/,
],
effectiveKeyRegList: [
/effectiveKey\s*:\s*'(.+)'/,
/effectiveKey\s*:\s*"(.+)"/,
],
// 属性operationType的正则
operationTypeRegList: [
/operationType\s*:\s*'(.+)'/,
/operationType\s*:\s*"(.+)"/,
]
}
};
- node >= 10
npm i // 安装依赖
npm test // 测试
npm run release // 发布
git push --follow-tags origin master && npm publish // npm 发布
- [X] 告警滞后提示处理
- [X] 增加importList显示
如果你觉得它有用,你可以给我买一杯奶茶。