@das-fed/cli 6.4.0-hot.9.1 → 6.4.0-test.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +0 -0
- package/package.json +1 -1
- package/src/commands/build/generate-nginx.js +1 -1
- package/src/commands/build/index.js +1 -1
- package/src/commands/build/nginx.main.conf +1 -1
- package/src/commands/build/nginx.micro.conf +3 -8
- package/src/commands/dev-helper/watchers/i18n/index.js +1 -1
- package/src/commands/extra/auth/index.js +1 -0
- package/src/commands/extra/i18n/index.js +2 -0
- package/src/commands/extra/i18n/vite.config.ts +1 -0
- package/src/commands/extra/index.js +1 -0
- package/src/commands/extra/theme/index.js +1 -0
- package/src/commands/init/index.js +1 -1
- package/src/commands/init/template/README.md +10 -0
- package/src/commands/init/template/public/config.js +4 -1
- package/src/commands/init/template/src/das-web-app.ts +9 -0
- package/src/commands/init/template/vite.config.ts +1 -4
- package/src/utils/pure-resolve/index.js +1 -0
- package/src/vite-plugins/das-fe-web-app/index.js +1 -1
package/bin/index.js
CHANGED
File without changes
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import fs from"fs-extra";import{dirname,resolve}from"path";import{fileURLToPath}from"url";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename),generateNginx=async e=>{let{cwd:r,mainAppName:a="",microAppName:i="",microApps:
|
1
|
+
import fs from"fs-extra";import{dirname,resolve}from"path";import{fileURLToPath}from"url";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename),generateNginx=async e=>{let{cwd:r,mainAppName:a="",microAppName:i="",microApps:o=""}=e;0<o.length&&(o=o.map(e=>({...e,name:e.name.toLocaleLowerCase()}))),a=a.toLocaleLowerCase(),i=i.toLocaleLowerCase();a;var e=!!i,n=resolve(__dirname,"./nginx.main.conf"),t=resolve(__dirname,"./nginx.micro.conf"),l=resolve(r,"public/nginx.conf"),n=(await fs.ensureFile(l),fs.readFileSync(n).toString());let m=fs.readFileSync(t).toString();e&&(m=m.replace(/\{url\}/g,("/web/"+i.split("/").pop()).replace(/\/\//g,"/"))),await fs.writeFile(l,e?m:n)};export{generateNginx};
|
@@ -1 +1 @@
|
|
1
|
-
import{initPublicConfig}from"../dev-helper/init-public-config.js";import{initWatchers}from"../dev-helper/watchers/index.js";import{execSync}from"child_process";import{resolve,relative,dirname}from"path";import{fileURLToPath}from"url";import minimist from"minimist";import fs from"fs-extra";import{
|
1
|
+
import{initPublicConfig}from"../dev-helper/init-public-config.js";import{initWatchers}from"../dev-helper/watchers/index.js";import{execSync}from"child_process";import{resolve,relative,dirname}from"path";import{fileURLToPath}from"url";import minimist from"minimist";import fs from"fs-extra";import{getWindowConfig}from"../../utils/get-window-config/index.js";import{getCliConfig}from"../../utils/get-cli-config/index.js";import{generateNginx}from"./generate-nginx.js";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);export default{handle:async i=>{var[,...e]=i,i=minimist(i),t=process.cwd(),o={cwd:t,isDev:!1,isBuild:!0,...await getCliConfig(),...i};if(!(o.isLib??!1)){await initPublicConfig(o),await initWatchers(o);let i=await getWindowConfig(resolve(t,"public/config.js"));try{var r,n=resolve(t,"config.js");await fs.exists(n)&&(r=(await import(relative(resolve(__dirname),n))).default,""===i.microAppName&&delete i.microAppName,i={...r,...i}),await generateNginx({cwd:t,...i})}catch(i){console.log("get rootConfig error",i)}}(e||[]).join(" ");let a="";i.c&&(a+="-c "+i.c),execSync("npx vite build "+a,{cwd:t,stdio:"inherit"})}};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
worker_processes
|
1
|
+
worker_processes 2;
|
2
2
|
worker_rlimit_nofile 2000;
|
3
3
|
events {
|
4
4
|
worker_connections 1000;
|
@@ -38,19 +38,14 @@ http {
|
|
38
38
|
server {
|
39
39
|
listen 80;
|
40
40
|
etag on;
|
41
|
-
location / {
|
42
|
-
root /usr/share/nginx/html;
|
43
|
-
try_files $uri $uri/ /index.html;
|
44
|
-
expires 0;
|
45
|
-
}
|
46
41
|
|
47
42
|
location ~ ^/(api|oss)/ {
|
48
|
-
proxy_pass http://gateway;
|
43
|
+
proxy_pass http://gateway:9080;
|
49
44
|
}
|
50
45
|
|
51
46
|
location {url} {
|
52
47
|
alias /usr/share/nginx/html;
|
53
|
-
try_files $uri $uri/
|
48
|
+
try_files $uri $uri/ /index.html;
|
54
49
|
expires 0;
|
55
50
|
}
|
56
51
|
|
@@ -1 +1 @@
|
|
1
|
-
import glob from"fast-glob";import fs from"fs-extra";import
|
1
|
+
import glob from"fast-glob";import fs from"fs-extra";import{resolve}from"path";import vm from"vm";import{json2type}from"../../../../utils/json2type/index.js";import{getCliConfig}from"../../../../utils/get-cli-config/index.js";let watchGlob=["src/**/**/i18n/*.ts","!src/**/**/i18n/useI18.ts"];function getExportedDefault(t){var e={data:{}},t=new vm.Script("data = "+t.replace("export default","")),a=vm.createContext(e);return t.runInContext(a),e.data}let handle=async(t={})=>{var{isDev:t,cwd:a}=t;if(t){var o,t=(await getCliConfig()).i18n?.watchGlob||[],r={};for(o of await glob([...watchGlob,...t],{cwd:a,absolute:!0,onlyFiles:!0}))try{var i=getExportedDefault((await fs.readFile(o)).toString());Object.assign(r,i)}catch(t){console.log("i18n文件解析错误",o),console.error(t)}let e={"zh-CN":""};Object.values(r).filter(t=>!!t["zh-CN"]).map(t=>Object.assign(e,t)),0===Object.keys(r).length&&(r.any="");t=resolve(a,"src/das-fe-local-runtime/i18n-runtime/type.d.ts");await json2type({data:[{title:"I18NName",type:"string",enum:Object.keys(e)},{title:"I18NKey",type:"string",enum:Object.keys(r)}],outputFilePath:t})}};export default{name:"das-i18n",glob:watchGlob,ignoreGlob:[],load:handle,change:handle};
|
@@ -0,0 +1 @@
|
|
1
|
+
let extraAuth=async()=>{};export{extraAuth};
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{resolve,relative,dirname}from"path";import{fileURLToPath}from"url";import fs from"fs-extra";import{build}from"vite";import prettier from"prettier";import glob from"fast-glob";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename),extractWrappedChinese=e=>{var i,e=(i=e.replace(/<!--[\s\S]*?-->/g,"").replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*console\..*$/gm,"")).replace(/(\bi18n\b|\bt\b)\s*\(([^)]*)$/gm,(e,t,a,r)=>{var s=i.indexOf(")",r);return-1!==s?e+i.slice(r+e.length,s+1).replace(/\n\s*/g,""):e});let s=/[\u4e00-\u9fa5]+/g,o=/(?:i18n|t)\s*\(\s*(['"`])/,p=[];return e.split("\n").forEach(e=>{for(;null!==(a=s.exec(e));){var[t]=a,a=a.index,r=a+t.length,a=e.slice(0,a).trim(),r=e.slice(r).trim();o.test(a)&&r.includes(")")&&p.push(t)}}),p},extraI18n=async e=>{var{cwd:t=process.cwd(),type:e="app"}=e||{},a=resolve(t,"i18n-colletion.local.ts"),r=(!await fs.exists(a)&&(await fs.ensureFile(a),r={app:"export default import.meta.glob(['./src/**/**/i18n/*.ts','!./src/**/**/i18n/useI18n.ts'], { eager: true, import: 'default' })",dasui:"export default import.meta.glob(['./packages/business-components/**/**/i18n/*.ts','./packages/components/**/**/i18n/*.ts',], { eager: true, import: 'default' })",dasweb:"export default import.meta.glob(['./packages/main-app-framework/**/**/i18n/*.ts'], { eager: true, import: 'default' })",dasutils:"export default import.meta.glob(['./api-services/**/**/i18n/*.ts','./create-api-service/**/**/i18n/*.ts'], { eager: true, import: 'default' })",daswebcomponents:"export default import.meta.glob(['./components/**/**/i18n/*.ts'], { eager: true, import: 'default' })"}[e])&&await fs.writeFile(a,r),resolve(__dirname,"./.temp"));await fs.ensureDir(r);let s=`index.${(new Date).getTime()}.cjs`;await build({configFile:resolve(__dirname,"./vite.config.ts"),build:{emptyOutDir:!0,outDir:r,lib:{entry:a,fileName:()=>s,formats:["cjs"]}}});var i,o=(await import("./.temp/"+s)).default;let p={};for(i in o)Object.assign(p,o[i]);var n;for(n of await glob({app:["src/**/**/*.vue","src/**/**/*.ts","!src/**/**/i18n/*.ts"],dasui:["packages/business-components/**/**/*.vue","packages/business-components/**/**/*.ts","packages/components/**/**/*.vue","packages/components/**/**/*.ts","!packages/**/**/i18n/*.ts"],dasweb:["packages/main-app-framework/**/**/*.vue","packages/main-app-framework/**/**/*.ts","!packages/**/**/i18n/*.ts"],dasutils:["api-services/**/**/*.ts","create-api-service/**/**/*.ts","!api-services/**/**/i18n/*.ts","!create-api-service/**/**/i18n/*.ts"],daswebcomponents:["components/**/**/*.vue","components/**/**/*.ts","!components/**/**/i18n/*.ts"]}[e],{cwd:t,onlyFiles:!0})){var l=resolve(t,n),l=(await fs.readFile(l)).toString(),l=extractWrappedChinese(l);0<l.length&&l.map(e=>p[e]="")}var m=resolve(t,"dist/i18n-collection");await fs.ensureDir(m),await fs.emptyDir(m);for(let s of["zh-CN","en"]){let r="export default {";Object.keys(p).map(e=>{var t=p[e];let a=t[s]||"";"zh-CN"===s&&(a=t[s]||t["zh-cn"]||t||e),r+=`'${e}': "${a}",\r
|
2
|
+
`}),r+="}";var c=resolve(m,s+".js");await fs.ensureFile(c),await fs.writeFile(c,await prettier.format(r,{parser:"typescript"}))}};export{extraI18n};
|
@@ -0,0 +1 @@
|
|
1
|
+
export default {}
|
@@ -0,0 +1 @@
|
|
1
|
+
import{extraI18n}from"./i18n/index.js";import{extraTheme}from"./theme/index.js";import{extraAuth}from"./auth/index.js";import minimist from"minimist";let extra=async e=>{await Promise.all([extraI18n(e),extraTheme(e),extraAuth(e)])};export default{handle:async e=>{console.log("das-cli extra running!");e=minimist(e),e={cwd:process.cwd(),isDev:!0,type:"app",...e};extra(e)}};export{extra};
|
@@ -0,0 +1 @@
|
|
1
|
+
let extraTheme=async()=>{};export{extraTheme};
|
@@ -1 +1 @@
|
|
1
|
-
import inquirer from"inquirer";import glob from"fast-glob";import{dirname,resolve}from"path";import{fileURLToPath}from"url";import fs from"fs-extra";import{consola}from"consola";import{execSync}from"child_process";import semver from"semver";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename),getPackageJson=()=>{var e=resolve(__dirname,"../../../package.json");return fs.existsSync(e)?fs.readJSONSync(e):{}};export default{alias:["create","create-app","-c"],handle:async e=>{var r=getPackageJson(),a=(consola.box(`Using ${r.name} v`+r.version),consola.info("create app for @das-fed"),consola.warn("必须使用 pnpm 作为依赖安装工具"),await inquirer.prompt([{name:"inputName",type:"input",message:"请输入应用名称(一般为英文缩写)"}])).inputName,[i]=(a||(consola.error("应用名称必填!"),process.exit()),a.split("/").slice(-1)),o="enterpriseadmin/"+i,a=(consola.success(`子应用名称为: ${o} (enterpriseadmin为默认加入的前缀)`),await inquirer.prompt([{name:"overwrite",type:"confirm",message:"初始化项目将覆盖当前目录的文件及文件夹,是否继续?"}])).overwrite;if(!a)return process.exit();var s,t=process.cwd(),n=resolve(__dirname,"./template");for(s of await glob(["**/**"],{cwd:n,dot:!0})){var p,c=resolve(t,s);await fs.copy(resolve(n,s),c,{overwrite:!0}),-1<s.indexOf("config.js")&&(p=(await fs.readFile(c)).toString(),await fs.writeFile(c,p.replaceAll("%microAppName%",o))),-1<s.indexOf("package.json")&&(p=(await fs.readFile(c)).toString(),await fs.writeFile(c,p.replaceAll("%packageName%",i)))}var a=["vue","vue-router"],m=["@vitejs/plugin-vue","typescript","vite","vue-tsc"];let l=["@das-fed/web","@das-fed/ui","@das-fed/utils"],d=["@das-fed/cli"],f=semver.parse(r.version).prerelease[0];f&&(l=l.map(e=>e+"@"+f),d=d.map(e=>e+"@"+f)),a.push(...l),m.push(...d),execSync("pnpm add "+a.join(" "),{cwd:t,stdio:"inherit"}),execSync("pnpm add -D "+m.join(" "),{cwd:t,stdio:"inherit"}),console.log(""),consola.success("项目初始化完成!"),consola.box("run: pnpm run dev")}};
|
1
|
+
import inquirer from"inquirer";import glob from"fast-glob";import{dirname,resolve}from"path";import{fileURLToPath}from"url";import fs from"fs-extra";import{consola}from"consola";import{execSync}from"child_process";import semver from"semver";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename),getPackageJson=()=>{var e=resolve(__dirname,"../../../package.json");return fs.existsSync(e)?fs.readJSONSync(e):{}};export default{alias:["create","create-app","-c"],handle:async e=>{var r=getPackageJson(),a=(consola.box(`Using ${r.name} v`+r.version),consola.info("create app for @das-fed"),consola.warn("必须使用 pnpm 作为依赖安装工具"),await inquirer.prompt([{name:"inputName",type:"input",message:"请输入应用名称(一般为英文缩写)"}])).inputName,[i]=(a||(consola.error("应用名称必填!"),process.exit()),a.split("/").slice(-1)),o="enterpriseadmin/"+i,a=(consola.success(`子应用名称为: ${o} (enterpriseadmin为默认加入的前缀)`),await inquirer.prompt([{name:"overwrite",type:"confirm",message:"初始化项目将覆盖当前目录的文件及文件夹,是否继续?"}])).overwrite;if(!a)return process.exit();var s,t=process.cwd(),n=resolve(__dirname,"./template");for(s of await glob(["**/**"],{cwd:n,dot:!0})){var p,c=resolve(t,s);await fs.copy(resolve(n,s),c,{overwrite:!0}),-1<s.indexOf("config.js")&&(p=(await fs.readFile(c)).toString(),await fs.writeFile(c,p.replaceAll("%microAppName%",o))),-1<s.indexOf("package.json")&&(p=(await fs.readFile(c)).toString(),await fs.writeFile(c,p.replaceAll("%packageName%",i)))}var a=["vue","vue-router","pinia-plugin-persistedstate"],m=["@vitejs/plugin-vue","typescript","vite","vue-tsc"];let l=["@das-fed/web","@das-fed/ui","@das-fed/utils"],d=["@das-fed/cli"],f=semver.parse(r.version).prerelease[0];f&&(l=l.map(e=>e+"@"+f),d=d.map(e=>e+"@"+f)),a.push(...l),m.push(...d),execSync("pnpm add "+a.join(" "),{cwd:t,stdio:"inherit"}),execSync("pnpm add -D "+m.join(" "),{cwd:t,stdio:"inherit"}),console.log(""),consola.success("项目初始化完成!"),consola.box("run: pnpm run dev")}};
|
@@ -17,3 +17,13 @@ pnpm run dev
|
|
17
17
|
```
|
18
18
|
pnpm run build
|
19
19
|
```
|
20
|
+
|
21
|
+
## config配置
|
22
|
+
|
23
|
+
### 如需本地开发开启sso登录
|
24
|
+
|
25
|
+
public/config.js,public/config.local.js中设置配置【sso: true, baseURL: 'http://ssoServer.com'】,其中baseURL为某个支持sso登录的环境地址
|
26
|
+
|
27
|
+
|
28
|
+
### 如本地需要登录失效后重定向到登录页面
|
29
|
+
public/config.js,public/config.local.js中设置配置【noRedireLogin: false】
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export default () => {
|
2
|
+
return {
|
3
|
+
microAppName: __MICRO_APPNAME__,
|
4
|
+
router: { glob: import.meta.glob('@/views/**/router.ts', { eager: true, import: 'default' }) },
|
5
|
+
plugins: { glob: import.meta.glob('@/plugins/*/index.ts', { eager: true, import: 'default' }) },
|
6
|
+
theme: { glob: import.meta.glob('@/**/theme/*.ts', { eager: true, import: 'default' }) },
|
7
|
+
i18n: { glob: import.meta.glob('@/**/i18n/*.ts', { eager: true, import: 'default' }) },
|
8
|
+
}
|
9
|
+
}
|
@@ -1,14 +1,11 @@
|
|
1
1
|
import { defineConfig } from 'vite'
|
2
|
-
import vue from '@vitejs/plugin-vue'
|
3
2
|
import { dasFeWebVitePlugin } from '@das-fed/cli'
|
4
3
|
import config from './config.js'
|
5
4
|
|
6
5
|
// https://vitejs.dev/config/
|
7
6
|
export default defineConfig(({ command }) => {
|
8
|
-
const isBuild = command === 'build'
|
9
7
|
return {
|
10
8
|
define: { __MICRO_APPNAME__: JSON.stringify(config.microAppName) },
|
11
|
-
|
12
|
-
plugins: [vue(), dasFeWebVitePlugin()],
|
9
|
+
plugins: [dasFeWebVitePlugin()],
|
13
10
|
}
|
14
11
|
})
|
@@ -0,0 +1 @@
|
|
1
|
+
import{fileURLToPath}from"url";import{dirname,resolve,sep}from"path";import fs from"fs-extra";let __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);import{parse as lexerParse}from"es-module-lexer";import MagicString from"magic-string";function addDirectoryAtLevel(e,r,i){if(i<0||i>e.split(sep).length)throw new Error("层级无效");return e.split(sep).reduce((e,s,t)=>(t===i&&e.push(r),e.push(s),e),[]).join(sep)}let pureExtname=async(e,s)=>{var t,r=[".js",".mjs","/index.js","/index.mjs"],i=resolve(s,e);for(t of r)if(await fs.exists(i+t))return""+e+t;if(e.startsWith("@das-fed/")){var a,n=resolve(s,addDirectoryAtLevel(e,"dist",2));for(a of r)if(await fs.exists(n+a))return""+e+a}},pureResolve=async(e,s)=>{var t,{cwd:r,nodeModulesCwd:i,packages:a=["@das-fed/ui","@das-fed/web","@das-fed/utils","@das-fed/web-components","dayjs","element-plus","ant-design-vue"]}=s||{};for(t of e){var n=resolve(r,t),l=(await fs.readFile(n)).toString(),[o]=lexerParse(l);if(o){o=o.filter(e=>!!e.n).filter(e=>!(e.n.endsWith(".js")||e.n.endsWith(".mjs")));if(o.length){var d=new MagicString(l);for(let t of o){let s=null;var f=t.n.endsWith(".css"),m=t.n.startsWith("element-plus")&&t.n.endsWith("/style/css"),p=t.n.startsWith("ant-design-vue")&&t.n.endsWith("/style/css"),u=!f&&!p&&!m&&!a.includes(t.n)&&(a.find(e=>t.n.startsWith(e))||t.n.startsWith("."));if(f&&d.overwrite(t.ss,t.se,""),m&&d.overwrite(t.ss,t.se,""),p&&d.overwrite(t.ss,t.se,""),u)if(t.n.startsWith(".")){f=await pureExtname(t.n,resolve(n,"../"));f&&(s=f)}else{let e=t.n;e.startsWith("dayjs")&&(e=e.replace("dayjs","dayjs/esm"));m=await pureExtname(e,i);console.log(m),m&&(s=m)}null!==s&&(2===t.t&&(s=`"${s}"`),d.overwrite(t.s,t.e,s))}await fs.writeFile(n,d.toString())}}}};export{pureResolve};
|
@@ -1 +1 @@
|
|
1
|
-
import{resolve,extname}from"path";import dayjs from"dayjs";let pureOpt=e=>{process.cwd();let{base:
|
1
|
+
import{resolve,extname}from"path";import dayjs from"dayjs";import fs from"fs-extra";import glob from"fast-glob";import{pureResolve}from"../../utils/pure-resolve/index.js";let pureOpt=e=>{process.cwd();let{base:s="./",apply:p="build",type:t="singleApp",external:a=["vue","vue-router","pinia","pinia-plugin-persistedstate",/^@das-fed\//,/^dayjs(\/.*)?$/,/^element-plus(\/.*)?$/,/^ant-design-vue(\/.*)?$/],entry:r="src/das-web-app.ts",outputDir:i="dist",...l}=e||{};return{base:s,apply:p,type:t,external:a,entry:r,outputDir:i,isSingleApp:"singleApp"===t,isDasMainApp:"mainApp"===t,isDasMicroApp:"microApp"===t,...l}},dasFeWebApp=e=>{let p=process.cwd(),{base:t,apply:s,external:a,entry:r,isSingleApp:i}=pureOpt(e);return i?{}:{name:"das-fe-web-app",apply:s,config:(e,{})=>{let s=e?.build?.assetsDir??"assets";(s=s||"")&&!s.endsWith("/")&&(s+="/");e=dayjs().format("YYYY-MM-DD-HH-mm-ss-SSS");return{base:t,build:{lib:{entry:resolve(p,r),name:"index",fileName:"index",formats:["es"]},rollupOptions:{external:a,output:{chunkFileNames:`[name]-[hash]-${e}.js`}}}}},closeBundle:async()=>{var e=resolve(p,"dist"),s=await glob("**/**/*.js",{cwd:e});await pureResolve(s,{cwd:e,nodeModulesCwd:resolve(p,"node_modules")})}}};export default e=>[dasFeWebApp(e)];
|