89 lines
2.8 KiB
JavaScript
89 lines
2.8 KiB
JavaScript
const fs = require('fs');
|
|
const swc = require('@swc/core');
|
|
const path = require('path');
|
|
const util = require('util');
|
|
const postcss = require('postcss');
|
|
const utils = require('./assets/utils.js');
|
|
const assproc = require('./assets/assproc.js');
|
|
|
|
const rootDir = __dirname;
|
|
const modulesDir = path.join(rootDir, 'node_modules');
|
|
|
|
const assetsDir = path.join(rootDir, 'assets');
|
|
const assetsCSS = path.join(assetsDir, 'misuzu.css');
|
|
const assetsJS = path.join(assetsDir, 'misuzu.js');
|
|
const assetsInfo = path.join(assetsDir, 'current.json');
|
|
|
|
const pubDir = path.join(rootDir, 'public');
|
|
const pubIndex = path.join(pubDir, 'index.html');
|
|
const pubAssets = '/assets';
|
|
const pubAssetsFull = path.join(pubDir, pubAssets);
|
|
const pubAssetCSSFormat = '%s-%s.css';
|
|
const pubAssetJSFormat = '%s-%s.js';
|
|
|
|
const isDebugBuild = fs.existsSync(path.join(rootDir, '.debug'));
|
|
|
|
const swcJscOptions = {
|
|
target: 'es2016',
|
|
loose: false,
|
|
externalHelpers: false,
|
|
keepClassNames: true,
|
|
preserveAllComments: false,
|
|
transform: {},
|
|
parser: {
|
|
syntax: 'ecmascript',
|
|
jsx: true,
|
|
dynamicImport: false,
|
|
privateMethod: false,
|
|
functionBind: false,
|
|
exportDefaultFrom: false,
|
|
exportNamespaceFrom: false,
|
|
decorators: false,
|
|
decoratorsBeforeExport: false,
|
|
topLevelAwait: true,
|
|
importMeta: false,
|
|
},
|
|
transform: {
|
|
react: {
|
|
runtime: 'classic',
|
|
pragma: '$er',
|
|
},
|
|
},
|
|
};
|
|
|
|
const postcssPlugins = [];
|
|
if(!isDebugBuild) postcssPlugins.push(require('cssnano'));
|
|
postcssPlugins.push(require('autoprefixer')({
|
|
remove: false,
|
|
}));
|
|
|
|
fs.mkdirSync(pubAssetsFull, { recursive: true });
|
|
|
|
(async () => {
|
|
const mszCssName = await assproc.process(assetsCSS, { 'prefix': '@', 'entry': 'main.css' })
|
|
.then(output => postcss(postcssPlugins).process(output, { from: assetsCSS }).then(output => {
|
|
const mszCssName = path.join(pubAssets, util.format(pubAssetCSSFormat, 'misuzu', utils.shortHash(output.css)));
|
|
fs.writeFileSync(path.join(pubDir, mszCssName), output.css);
|
|
return mszCssName;
|
|
}));
|
|
|
|
const mszJsName = await assproc.process(assetsJS, { 'prefix': '#', 'entry': 'main.js' })
|
|
.then(output => swc.transform(output, {
|
|
filename: 'misuzu.js',
|
|
sourceMaps: false,
|
|
isModule: false,
|
|
minify: !isDebugBuild,
|
|
jsc: swcJscOptions,
|
|
}).then(async output => {
|
|
const mszJsName = path.join(pubAssets, util.format(pubAssetJSFormat, 'misuzu', utils.shortHash(output.code)));
|
|
fs.writeFileSync(path.join(pubDir, mszJsName), output.code);
|
|
return mszJsName;
|
|
}));
|
|
|
|
fs.writeFileSync(assetsInfo, JSON.stringify({
|
|
mszjs: mszJsName,
|
|
mszcss: mszCssName,
|
|
}));
|
|
|
|
assproc.housekeep(pubAssetsFull);
|
|
})();
|