vite-plugin-earth/src/index.ts

108 lines
2.8 KiB
TypeScript
Raw Normal View History

2022-04-22 15:27:49 +08:00
/**
* @Author: xuwoool@qq.com
* @Date: 2022-04-22 13:50:15
*/
2022-02-10 13:08:07 +08:00
import path from 'path';
2022-04-22 15:27:49 +08:00
import fs from 'fs-extra';
2022-02-10 13:08:07 +08:00
import serveStatic from 'serve-static';
2022-04-22 15:27:49 +08:00
import { HtmlTagDescriptor, normalizePath, Plugin } from 'vite';
2022-02-10 13:08:07 +08:00
interface VitePluginCesiumOptions {
2022-04-22 15:27:49 +08:00
libsPath?: String;
useUnminified?: Boolean;
npmPkgName?: String;
useMars3d?: Boolean;
2022-02-10 13:08:07 +08:00
}
function vitePluginCesium(
options: VitePluginCesiumOptions = {
2022-04-22 15:27:49 +08:00
libsPath: 'libs',
useUnminified: false,
npmPkgName: 'mars3d-cesium',
useMars3d: false
2022-02-10 13:08:07 +08:00
}
): Plugin {
2022-04-22 15:27:49 +08:00
const cesiumBuildPath = `./node_modules/${options.npmPkgName}/Build`;
let base = '/';
2022-02-10 13:08:07 +08:00
let outDir = 'dist';
2022-04-22 15:27:49 +08:00
let isBuild = false;
let libsPath = options.libsPath || 'libs';
let useUnminified = options.useUnminified || false;
2022-02-10 13:08:07 +08:00
return {
2022-04-22 15:27:49 +08:00
name: 'vite-plugin-cesium',
config(config, { command }) {
2022-02-10 13:08:07 +08:00
isBuild = command === 'build';
2022-04-22 15:27:49 +08:00
base = config.base || '/';
outDir = config.build?.outDir || 'dist';
2022-02-10 15:35:43 +08:00
},
2022-02-10 13:08:07 +08:00
configureServer({ middlewares }) {
2022-04-22 15:27:49 +08:00
middlewares.use(
`/${libsPath}/Cesium`,
serveStatic(
normalizePath(
path.join(
cesiumBuildPath,
useUnminified ? 'CesiumUnminified' : 'Cesium'
)
)
)
2022-02-10 13:08:07 +08:00
);
},
2022-04-22 15:27:49 +08:00
closeBundle() {
2022-02-10 13:08:07 +08:00
if (isBuild) {
try {
2022-04-22 15:27:49 +08:00
fs.copySync(
path.join(cesiumBuildPath, 'Cesium', 'Assets'),
path.join(outDir, String(libsPath), 'Cesium', 'Assets')
2022-02-10 13:08:07 +08:00
);
2022-04-22 15:27:49 +08:00
fs.copySync(
path.join(cesiumBuildPath, 'Cesium', 'ThirdParty'),
path.join(outDir, String(libsPath), 'Cesium', 'ThirdParty')
2022-02-10 13:08:07 +08:00
);
2022-04-22 15:27:49 +08:00
fs.copySync(
path.join(cesiumBuildPath, 'Cesium', 'Widgets'),
path.join(outDir, String(libsPath), 'Cesium', 'Widgets')
2022-02-10 13:08:07 +08:00
);
2022-04-22 15:27:49 +08:00
fs.copySync(
path.join(cesiumBuildPath, 'Cesium', 'Workers'),
path.join(outDir, String(libsPath), 'Cesium', 'Workers')
2022-02-10 13:08:07 +08:00
);
2022-04-22 15:27:49 +08:00
fs.copySync(
path.join(cesiumBuildPath, 'Cesium', 'Cesium.js'),
path.join(outDir, String(libsPath), 'Cesium', 'Cesium.js')
2022-02-10 13:08:07 +08:00
);
2022-04-22 15:27:49 +08:00
} catch (e) {}
2022-02-10 13:08:07 +08:00
}
},
transformIndexHtml() {
2022-04-22 15:27:49 +08:00
let tags: HtmlTagDescriptor[] = [];
tags.push({
tag: 'script',
attrs: {
src: normalizePath(
path.join(base, String(libsPath), 'Cesium', 'Cesium.js')
)
2022-02-10 13:08:07 +08:00
},
2022-04-22 15:27:49 +08:00
injectTo: 'head'
});
tags.push({
tag: 'link',
attrs: {
rel: 'stylesheet',
href: normalizePath(
path.join(base, String(libsPath), 'Cesium', 'Widgets/widgets.css')
)
},
injectTo: 'head'
});
2022-02-10 13:08:07 +08:00
return tags;
}
};
}
2022-04-22 15:27:49 +08:00
export default vitePluginCesium;