vue-apps/com.actionsoft.apps.coe.pal.datamigration/vite.config.ts
2022-06-27 17:47:49 +08:00

190 lines
6.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()],
})