190 lines
6.8 KiB
TypeScript
190 lines
6.8 KiB
TypeScript
|
|
import {defineConfig,} from 'vite'
|
|||
|
|
import vue from '@vitejs/plugin-vue'
|
|||
|
|
import fs from "fs-extra"
|
|||
|
|
|
|||
|
|
declare const require: any;
|
|||
|
|
declare const process: any;
|
|||
|
|
const path = require("path");
|
|||
|
|
|
|||
|
|
const AWSDevParams = require("./AWSDevParams");
|
|||
|
|
Object.assign(AWSDevParams, require("./AWSDevServiceParams"));
|
|||
|
|
const AWSReleasePath = AWSDevParams.AWSReleasePath;
|
|||
|
|
const AWSPortalUrl = AWSDevParams.AWSPortalUrl;
|
|||
|
|
//开发时通过用户名及密码获取sessionId
|
|||
|
|
const devUserInfo = AWSDevParams.devUserInfo;
|
|||
|
|
const AWSproxyPath = "/AWSDEVURL/r/"; //防止跨域的地址
|
|||
|
|
const moduleTemplateInAWS = AWSDevParams.moduleTemplateInAWS;//平台的模板路径
|
|||
|
|
const outputDir = AWSDevParams.outputDir;
|
|||
|
|
const publicPath = AWSDevParams.publicPath;//决定生成在平台的js或css的相对路径,与build配置的路径要对应
|
|||
|
|
//判断是否开发
|
|||
|
|
const isProduction = process.env.NODE_ENV === "production";
|
|||
|
|
//开发时路径和build到平台路径
|
|||
|
|
const AWSJSAndCSSPath = isProduction ? "../" : AWSproxyPath.replace("r/", "");
|
|||
|
|
const importAWSCSS = AWSDevParams.importAWSCSS == null ? [] : AWSDevParams.importAWSCSS;
|
|||
|
|
const importAWSJS = AWSDevParams.importAWSJS == null ? [] : AWSDevParams.importAWSJS;
|
|||
|
|
const AWSJSAndCSSImportArray = [] as any[];
|
|||
|
|
for (const k of importAWSCSS) {
|
|||
|
|
AWSJSAndCSSImportArray.push("<link type='text/css' rel='stylesheet' href='" + AWSJSAndCSSPath + k + "'/>");
|
|||
|
|
}
|
|||
|
|
for (const k of importAWSJS) {
|
|||
|
|
AWSJSAndCSSImportArray.push("<script type='text/javascript' src='" + AWSJSAndCSSPath + k + "'></script>");
|
|||
|
|
}
|
|||
|
|
const getAWSFileRelativePath = () => {
|
|||
|
|
let index = "./";
|
|||
|
|
if (isProduction) {
|
|||
|
|
index = publicPath;
|
|||
|
|
}
|
|||
|
|
return index;
|
|||
|
|
};
|
|||
|
|
const getIndexPath = () => {
|
|||
|
|
let index = "index.html";
|
|||
|
|
if (isProduction) {
|
|||
|
|
index = AWSReleasePath + moduleTemplateInAWS;
|
|||
|
|
}
|
|||
|
|
return index;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const data = {
|
|||
|
|
AWSJSAndCSSImport: AWSJSAndCSSImportArray.join("\n"),
|
|||
|
|
AWSJSAndCSSPath,
|
|||
|
|
devUserInfo: isProduction ? {} : devUserInfo,
|
|||
|
|
publicDir: getAWSFileRelativePath(),
|
|||
|
|
isProduction,
|
|||
|
|
axiosBaseUrl: isProduction ? "./" : AWSproxyPath,
|
|||
|
|
settingParam: isProduction ? "<#settingParam>" : "{}",
|
|||
|
|
}
|
|||
|
|
const replaceHtml = (html: string, htmlMap: any) => {
|
|||
|
|
for (const key in htmlMap) {
|
|||
|
|
if (key == "publicDir") {
|
|||
|
|
//公共路径特殊处理
|
|||
|
|
html = html.replace(/\/\$\{publicDir\}(.*?)"/g, htmlMap[key]+"$1\"");
|
|||
|
|
} else {
|
|||
|
|
html = html.replace(new RegExp("\\$\\{" + key + "\\}", "g"), typeof htmlMap[key] == "object" ? JSON.stringify(htmlMap[key]) : htmlMap[key]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return html;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
const AWSPlugin: any = () => {
|
|||
|
|
let config = null as any;
|
|||
|
|
return {
|
|||
|
|
name: 'read-config',
|
|||
|
|
|
|||
|
|
configResolved(resolvedConfig: any) {
|
|||
|
|
// 存储最终解析的配置
|
|||
|
|
config = resolvedConfig;
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 在其他钩子中使用存储的配置
|
|||
|
|
transform() {
|
|||
|
|
if (config.command === 'serve') {
|
|||
|
|
// serve: 由开发服务器调用的插件
|
|||
|
|
} else {
|
|||
|
|
// build: 由 Rollup 调用的插件
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
transformIndexHtml(html: string) {
|
|||
|
|
return replaceHtml(html, data);
|
|||
|
|
},
|
|||
|
|
renderChunk(code: string, model: any) {
|
|||
|
|
if (/\/\$\{publicDir\}\//.test(code)) {
|
|||
|
|
return code.replace(/\/\$\{publicDir\}\//g, data["publicDir"] + "/");
|
|||
|
|
}
|
|||
|
|
return code;
|
|||
|
|
},
|
|||
|
|
closeBundle() {
|
|||
|
|
fs.move(AWSReleasePath + outputDir + "/index.html", getIndexPath(), {
|
|||
|
|
overwrite: true
|
|||
|
|
});
|
|||
|
|
// fs.rename(resolve(filePath + "/style.css"), resolve(filePath + "/awsui.css"));
|
|||
|
|
// fs.rename(resolve(filePath + "/awsui.umd.js"), resolve(filePath + "/awsui.umd.min.js"));
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const rollupPlugin = () => {
|
|||
|
|
return {
|
|||
|
|
name: 'rullupPlugin',
|
|||
|
|
renderChunk(code: string, model: any) {
|
|||
|
|
//去除js中的css文本串
|
|||
|
|
for (const key in model.modules) {
|
|||
|
|
if (/\.(css|less)$/.test(key)) {
|
|||
|
|
code = code.replace(model.modules[key].code, "");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return code;
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// https://vitejs.dev/config/
|
|||
|
|
export default defineConfig({
|
|||
|
|
// root: getIndexPath(),
|
|||
|
|
// publicDir: getAWSFileRelativePath(),
|
|||
|
|
//生成入口的html文件位置
|
|||
|
|
base: isProduction ? "${publicDir}" : "/", //公共路径特殊处理
|
|||
|
|
build: {
|
|||
|
|
outDir: AWSReleasePath + outputDir,
|
|||
|
|
emptyOutDir: true,
|
|||
|
|
// sourcemap:"inline",
|
|||
|
|
minify: "esbuild", //esbuild更快大一点点,terser慢但仅小一点点
|
|||
|
|
cssCodeSplit: false,
|
|||
|
|
commonjsOptions: {
|
|||
|
|
// non-CommonJS modules will be ignored, but you can also
|
|||
|
|
// specifically include/exclude files
|
|||
|
|
include: ['node_modules/**', "plugins/**", "lib/**", "src/**"], // Default: undefined
|
|||
|
|
exclude: ['node_modules/foo/**', 'node_modules/bar/**'], // Default: undefined
|
|||
|
|
// these values can also be regular expressions
|
|||
|
|
// include: /node_modules/
|
|||
|
|
|
|||
|
|
// search for files other than .js files (must already
|
|||
|
|
// be transpiled by a previous plugin!)
|
|||
|
|
extensions: ['.js', '.coffee'], // Default: [ '.js' ]
|
|||
|
|
|
|||
|
|
// if true then uses of `global` won't be dealt with by this plugin
|
|||
|
|
ignoreGlobal: false, // Default: false
|
|||
|
|
|
|||
|
|
// if false then skip sourceMap generation for CommonJS modules
|
|||
|
|
sourceMap: false, // Default: true
|
|||
|
|
|
|||
|
|
// unconverted. Pass an array containing the IDs
|
|||
|
|
// or a `id => boolean` function. Only use this
|
|||
|
|
// option if you know what you're doing!
|
|||
|
|
ignore: ['conditional-runtime-dependency']
|
|||
|
|
},
|
|||
|
|
rollupOptions: {
|
|||
|
|
output: {
|
|||
|
|
assetFileNames : 'assets/asset-[name]-[hash][extname]',
|
|||
|
|
chunkFileNames: 'js/chunck-[name]-[hash].js',
|
|||
|
|
entryFileNames: 'js/entry-[name]-[hash].js'
|
|||
|
|
},
|
|||
|
|
plugins: [rollupPlugin()]
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// eslint-loader 是否在保存的时候检查
|
|||
|
|
// lintOnSave: true,
|
|||
|
|
// productionSourceMap: false, //打包不使用源码(false后在平台无法调试)
|
|||
|
|
// use the full build with in-browser compiler?
|
|||
|
|
// https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
|
|||
|
|
// compiler: false,
|
|||
|
|
resolve: {
|
|||
|
|
alias: {
|
|||
|
|
"@": path.resolve(__dirname as any, "./src")
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
server: {
|
|||
|
|
host : "0.0.0.0",
|
|||
|
|
proxy: {
|
|||
|
|
//配置跨域
|
|||
|
|
"/AWSDEVURL": {
|
|||
|
|
target: AWSPortalUrl,
|
|||
|
|
ws: true,
|
|||
|
|
changeOrigin: true, //允许跨域
|
|||
|
|
rewrite: (path) => path.replace(/^\/AWSDEVURL/, '')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
plugins: [vue(), AWSPlugin()],
|
|||
|
|
})
|