const path = require("path");
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import copy from 'rollup-plugin-copy' //引入插件
// console.log(loadEnv('development', process.cwd()).VITE_PROXY_URL, process.env) // 123
// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
console.log(command, mode)
const userConfig: any = {
root: process.cwd(),//index文件所在位置
base: '/',
mode: 'development', //在配置中指明将会把 serve 和 build 时的模式 都 覆盖掉,也可以通过命令行 --mode 选项来重写。
publicDir: 'public',//静态资源目录,会打包到outDir文件夹
cacheDir: 'node_modules/.vite', //存储缓存文件的目录。此目录下会存储预打包的依赖项或 vite 生成的某些缓存文件,你可以使用 --force 命令行选项或手动删除目录
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
"~": path.resolve(__dirname, "lib"),
},
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']//导入时想要省略的扩展名列表。注意,不 建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持。
},
json: {
namedExports: true,//是否支持从 .json 文件中进行按名导入。
stringify: false,//若设置为 true,导入的 JSON 会被转换为 export default JSON.parse("..."),这样会比转译成对象字面量性能更好,尤其是当 JSON 文件较大的时候。//开启此项,则会禁用按名导入。
},
assetsInclude: ['**/*.gltf', '**/*.fbx'],//是否可以用import导入额外的静态资源
envDir: 'root',//环境文件目录
envPrefix: 'VITE_',//环境变量头
logLevel: 'info',//调整控制台输出的级别,默认为 'info'
clearScreen: true,//是否清屏
build: {
target: 'modules',//构建目标,自定义目标也可以是一个 ES 版本(例如:es2015)、一个浏览器版本(例如:chrome58)或是多个目标组成的一个数组。
lib: {
entry: path.resolve(__dirname, "lib/index.ts"),
name: "ThreeEntity",//暴露的全局变量
formats: ['es', 'umd'],
fileName: (format) => `ThreeEntity.${format}.js`,//fileName 是输出的包文件名,默认 fileName 是 package.json 的 name 选项,它还可以被定义为参数为 format 的函数。
},
rollupOptions: {
// 确保外部化处理那些你不想打包进库的依赖
external: ['vue'],
output: {
// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
globals: {
vue: "Vue",
},
},
},
outDir: "build",//指定输出路径(相对于 项目根目录).
assetsDir: 'assets',//指定生成静态资源的存放路径(相对于 build.outDir)
assetsInlineLimit: '4096',//小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求
cssCodeSplit: true,//启用/禁用 CSS 代码拆分。当启用时,在异步 chunk 中导入的 CSS 将内联到异步 chunk 本身,并在其被加载时插入。
cssTarget: 'modules',//默认与 build.target 一致
sourcemap: false,//构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件,。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。
//'hidden' 的工作原理与 'true' 相似,只是 bundle 文件中相应的注释将不被保留。
emptyOutDir: true,//若 outDir 在 root 目录下,则为 true
watch: {}, //设置为 { } 则会启用 rollup 的监听器。在涉及只用在构建时的插件时和集成开发流程中很常用
},
plugins: [vue(),
copy({
targets: [
{ src: 'utils/*', dest: 'demo/' }
]
})
],
server: {
open: 'chrome',
host: '0.0.0.0',
port: 3000,
proxy: {
},
force: true,//是否强制构建
watch: {
ignored: ['!**/node_modules/your-package-name/**']//监视指定包的更改
},
},
optimizeDeps: {
exclude: ['your-package-name'],//在预构建中强制排除的依赖项
include: [],//默认情况下,不在 node_modules 中的,链接的包不会被预构建。使用此选项可强制预构建链接的包。
keepNames: false,//打包器有时需要重命名符号以避免冲突。 设置此项为 true 可以在函数和类上保留 name 属性。
}
}
return userConfig
});