瀏覽代碼

feat: 打包c licli

lvkun 2 年之前
父節點
當前提交
8ed8d16ca3
共有 9 個文件被更改,包括 16117 次插入341 次删除
  1. 2 11
      config/defaultSetting.ts
  2. 15672 1
      package-lock.json
  3. 4 0
      package.json
  4. 57 10
      plugins/build.js
  5. 2 2
      plugins/electron.js
  6. 60 0
      plugins/user-option.js
  7. 2 1
      src/layout/navbar.vue
  8. 2 0
      src/router/before.ts
  9. 316 316
      yarn.lock

+ 2 - 11
config/defaultSetting.ts

@@ -1,17 +1,8 @@
-
-/**
- * @description 项目默认配置
- */
-
 export default {
   appName: '蛟龙云',
-  documentIco: '', // 文档图标
+  userInfoHidden: false,
+  documentIco: '',
   logoExpand: require('@/static/logo-big.png'),
   logoContract: require('@/static/logo.png'),
-
-  // docTitle: 'jjl',
-  // docLogo: '',
-  // title: '',
-  // logo: '',
   logout: ''
 }

File diff suppressed because it is too large
+ 15672 - 1
package-lock.json


+ 4 - 0
package.json

@@ -8,6 +8,7 @@
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "build:package": "node plugins/build.js",
+    "build:cli": "node plugins/user-option.js",
     "start": "yarn run serve",
     "start:win": "electron . win",
     "start:mac": "electron . mac",
@@ -25,12 +26,15 @@
     "@vueuse/core": "^9.13.0",
     "ant-design-vue": "^4.0.0-rc.3",
     "axios": "^1.3.5",
+    "chalk": "^5.3.0",
     "codemirror": "^6.0.1",
+    "commander": "^11.1.0",
     "core-js": "^3.8.3",
     "dayjs": "^1.11.7",
     "echarts": "^5.4.2",
     "flicker-vue-hooks": "^1.0.16",
     "html2canvas": "^1.4.1",
+    "inquirer": "^8.2.6",
     "mitt": "^3.0.0",
     "normalize.css": "^8.0.1",
     "path-browserify": "^1.0.1",

+ 57 - 10
plugins/build.js

@@ -4,15 +4,57 @@ const { resolve, join } = require('path')
 
 const args = process.argv.slice(2)
 
+console.log(args.map((arg) => arg))
+
+const userOptions = {}
+
+args.forEach((arg) => {
+  const [key, value] = arg.split(':')
+  if (key === 'package') {
+    userOptions[key] = value.replaceAll('、', ',')
+  } else {
+    userOptions[key] = value
+  }
+})
+
 console.log('读取脚本参数中 🤬')
 
+console.log(userOptions.logo ? '去掉logo...' : '保留logo...')
+
 const rootPath = join(__dirname, '..')
 
+const AppConfigFs = fs.readFileSync(resolve(rootPath, 'config/defaultSetting.ts'), 'utf8')
+
+const AppConfigFsr = AppConfigFs.replace(
+  `export default {
+    appName: '蛟龙云',
+    userInfoHidden: false,
+    documentIco: '',
+    logoExpand: require('@/static/logo-big.png'),
+    logoContract: require('@/static/logo.png'),
+    logout: ''
+  }`,
+  `export default {
+    appName: '',
+    userInfoHidden: true,
+    documentIco: '',
+    logoExpand: '',
+    logoContract: '',
+    logout: ''
+  }`
+)
+
+fs.writeFileSync(resolve(rootPath, 'config/defaultSetting.ts'), AppConfigFsr, 'utf-8')
+
+console.log('打包' + userOptions.package + '等模块中')
+
+console.log('打包至' + userOptions.platform + '平台')
+
 const file = fs.readFileSync(resolve(rootPath, 'src/router/index.ts'), 'utf8')
 
 const r = file.replace(
   'const _routes = [iot, schedule, view, lowcode, user, login]',
-  `const _routes = [${args.map((arg, index) => index > 0 ? ` ${arg}` : arg)}]`
+  `const _routes = [${userOptions.package}]`
 )
 
 console.log('修改路由值成功 🌹')
@@ -21,12 +63,17 @@ fs.writeFileSync(resolve(rootPath, 'src/router/index.ts'), r, 'utf-8')
 
 console.log('开始打包  📦')
 console.log('打包中...... 💪')
-exec('npm run build', (error, stdout, stderr) => {
-  if (error) {
-    console.error(`执行脚本时出错:${error}`)
-    fs.writeFileSync(resolve(rootPath, 'src/router/index.ts'), file, 'utf-8')
-  } else {
-    console.log('打包成功 🎉')
-    fs.writeFileSync(resolve(rootPath, 'src/router/index.ts'), file, 'utf-8')
-  }
-})
+
+if (userOptions.platform === 'web') {
+  exec('npm run build', (error, stdout, stderr) => {
+    if (error) {
+      console.error(`执行脚本时出错:${error}`)
+      fs.writeFileSync(resolve(rootPath, 'src/router/index.ts'), file, 'utf-8')
+    } else {
+      console.log('打包成功 🎉')
+      fs.writeFileSync(resolve(rootPath, 'src/router/index.ts'), file, 'utf-8')
+    }
+  })
+} else {
+  exec(`electron . ${userOptions.platform}`)
+}

+ 2 - 2
plugins/electron.js

@@ -63,8 +63,8 @@ app.whenReady().then(() => {
 
   tray.setContextMenu(contextMenu)
 
-  tray.setToolTip('This is my application')
-  tray.setTitle('This is my title')
+  tray.setToolTip('蛟龙云')
+  tray.setTitle('蛟龙云')
 
   createWindow()
 })

+ 60 - 0
plugins/user-option.js

@@ -0,0 +1,60 @@
+
+/**
+ *  @description 该脚本用来获取用户配置
+ */
+
+const { program } = require('commander')
+
+const { createPromptModule } = require('inquirer')
+
+const { exec } = require('child_process')
+
+const prompt = createPromptModule()
+
+const packageMap = new Map([
+  ['全部', 'all'],
+  ['物联网', 'iot'],
+  ['视联网', 'cvs'],
+  ['数据中台', 'datacenter'],
+  ['可视化', 'view'],
+  ['用户权限', 'user']
+])
+
+const routes = ['iot', 'cvs', 'datacenter', 'view', 'user']
+
+const promptList = [
+  {
+    type: 'list',
+    message: '是否去掉logo',
+    name: 'logo',
+    choices: ['yes', 'no']
+  },
+  {
+    type: 'checkbox',
+    message: '请选择打包的模块',
+    name: 'package',
+    choices: ['全部', '物联网', '视联网', '数据中台', '可视化', '用户权限']
+  },
+  {
+    type: 'list',
+    message: '请选择打包的平台',
+    name: 'platform',
+    choices: ['web', 'mac', 'win']
+  }
+]
+
+prompt(promptList).then((res) => {
+  const package = res.package.includes('全部') ? routes : res.package.map(item => packageMap.get(item))
+
+  const userOPtions = JSON.stringify({
+    logo: res.logo === 'yes',
+    package: [(package.length === 0 ? routes : package).join('、')],
+    platform: res.platform
+  })
+  console.log('重写配置项中......')
+  exec('node plugins/build.js ' + userOPtions, (error, stdout, stderr) => {
+    console.log(error)
+    console.log(stdout)
+    console.log(stderr)
+  })
+})

+ 2 - 1
src/layout/navbar.vue

@@ -46,7 +46,7 @@
               <a-button type="text" @click="changeTheme" > <IconTsx :name="iconName" /></a-button>
             </a-col>
             <a-col class="df-center"  style="height: 54px;">
-              <user />
+              <user v-if="!AppConfig.userInfoHidden" />
             </a-col>
           </a-row>
         </a-col>
@@ -65,6 +65,7 @@ import { useDeviceType } from '@/hooks'
 import search from './components/search/index.vue'
 import { DesktopOutlined } from '@ant-design/icons-vue'
 import { message } from 'ant-design-vue'
+import AppConfig from 'AppConfig'
 
 const route = useRoute()
 

+ 2 - 0
src/router/before.ts

@@ -3,10 +3,12 @@ import { usePort } from '@/hooks/index'
 import { useRouterTravelStore, useUserStore } from '@/store'
 import { message } from 'ant-design-vue'
 import { RouteRecordRaw } from 'vue-router'
+import ApppConfig from 'AppConfig'
 
 // const useRouterTravel = useRouterTravelStore()
 
 router.beforeEach((to, from, next) => {
+  document.title = ApppConfig.appName
   usePort(to.meta.title as string)
   if (from.path !== '/login') {
     console.log('to:', to)

File diff suppressed because it is too large
+ 316 - 316
yarn.lock


Some files were not shown because too many files changed in this diff