import { ModuleThis } from "@nuxt/types/config/module" const createThemeColorReplacerPlugin = require('./theme/theme-color-replacer.plugin.config') const defaultThemeVar = require('./theme/theme-color.var.config') // 系统默认样式变量 const path = require('path') const fs = require('fs') const _ = require('lodash') const { mkdirp }= require('mkdirp') class BuildManager { private moduleContainer: ModuleThis private options : MixNuxtOptions constructor(moduleContainer: ModuleThis){ this.moduleContainer = moduleContainer this.options = moduleContainer.options } async buildDefaultTheme() : Promise { this.options.theme = Object.assign({} , defaultThemeVar , this.options.theme || {}) let outputFileDir = path.join( this.options.rootDir , 'assets','theme') if(!fs.existsSync(outputFileDir)){ await mkdirp(outputFileDir) } let themeFilePath = path.join( outputFileDir , 'generate.var.scss') let compiled = _.template(require('./theme/theme-color.template.js') ) let str = compiled({ themes: this.options.theme}) await fs.writeFileSync(themeFilePath , str) let nuxtStyleResources = this.options.styleResources if(!nuxtStyleResources.scss){ nuxtStyleResources.scss = ['assets/theme/generate.var.scss'] }else { nuxtStyleResources.scss.push('assets/theme/generate.var.scss') nuxtStyleResources.scss = Array.from(new Set(nuxtStyleResources.scss)) } this.moduleContainer.addModule('@nuxtjs/style-resources') } buildHashFileName() : void { this.options.head.link.push( { rel:'stylesheet', href:'https://at.alicdn.com/t/font_2828596_osaykv3q5vg.css'} ) if(this.options.theme) { this.options.build.plugins.push(createThemeColorReplacerPlugin(this.options.theme['primary-color'])) } this.options.build.filenames.app = ({ isDev } : { isDev: boolean }) => isDev ? '[name].js' : '[name].js?v=[contenthash]' this.options.build.filenames.chunk = ({ isDev } : { isDev: boolean }) => isDev ? '[name].js' : '[name].js?v=[contenthash]' this.options.build.filenames.css = ({ isDev } : { isDev: boolean }) => isDev ? '[name].css' : '[name].css?v=[contenthash]' } } export default BuildManager