327fef0ad8
refs https://github.com/TryGhost/Ghost/issues/15502 - this commit migrates Portal from CRA to Vite, as it brings the package more inline with the direction we're going in terms of tooling for builds - the bulk of the changes here are just config related to get things working with Vite, and then cleaning up all the CRA boilerplate
81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
import {resolve} from 'path';
|
|
import fs from 'fs/promises';
|
|
|
|
import {defineConfig} from 'vitest/config';
|
|
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js';
|
|
import reactPlugin from '@vitejs/plugin-react';
|
|
import svgrPlugin from 'vite-plugin-svgr';
|
|
|
|
import pkg from './package.json';
|
|
|
|
import {SUPPORTED_LOCALES} from '@tryghost/i18n';
|
|
|
|
export default defineConfig((config) => {
|
|
const outputFileName = pkg.name[0] === '@' ? pkg.name.slice(pkg.name.indexOf('/') + 1) : pkg.name;
|
|
|
|
return {
|
|
clearScreen: false,
|
|
define: {
|
|
'process.env.NODE_ENV': JSON.stringify(config.mode),
|
|
REACT_APP_VERSION: JSON.stringify(process.env.npm_package_version),
|
|
},
|
|
server: {
|
|
port: 5368,
|
|
},
|
|
plugins: [
|
|
cssInjectedByJsPlugin(),
|
|
reactPlugin(),
|
|
svgrPlugin(),
|
|
],
|
|
esbuild: {
|
|
loader: "jsx",
|
|
include: /src\/.*\.jsx?$/,
|
|
exclude: [],
|
|
},
|
|
optimizeDeps: {
|
|
esbuildOptions: {
|
|
plugins: [
|
|
{
|
|
name: "load-js-files-as-jsx",
|
|
setup(build) {
|
|
build.onLoad({ filter: /src\/.*\.js$/ }, async (args) => ({
|
|
loader: "jsx",
|
|
contents: await fs.readFile(args.path, "utf8"),
|
|
}));
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
build: {
|
|
outDir: resolve(__dirname, 'umd'),
|
|
emptyOutDir: true,
|
|
minify: true,
|
|
sourcemap: true,
|
|
cssCodeSplit: false,
|
|
lib: {
|
|
entry: resolve(__dirname, 'src/index.js'),
|
|
formats: ['umd'],
|
|
name: pkg.name,
|
|
fileName: (format) => `${outputFileName}.min.js`,
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: false,
|
|
}
|
|
},
|
|
commonjsOptions: {
|
|
include: [/ghost/, /node_modules/],
|
|
dynamicRequireRoot: '../',
|
|
dynamicRequireTargets: SUPPORTED_LOCALES.map((locale) => `../i18n/locales/${locale}/portal.json`),
|
|
}
|
|
},
|
|
test: {
|
|
globals: true,
|
|
environment: 'jsdom',
|
|
setupFiles: './src/setupTests.js',
|
|
testTimeout: 10000
|
|
}
|
|
};
|
|
});
|