webpack-mutiple-theme-bundle-css-demo icon indicating copy to clipboard operation
webpack-mutiple-theme-bundle-css-demo copied to clipboard

博主,IView UI自定义主题如何使用

Open thanktiger opened this issue 6 years ago • 4 comments

博主,这是我的webpack配置 我在我的工程src下建立一个themes文件夹,里面有index.js ,index.less, purple.less, red.less 目前来说不太明白您的参数里面该如何修改,谢谢。

'use strict' const path = require('path') const utils = require('./utils') const webpack = require('webpack') const config = require('../config') const merge = require('webpack-merge') const multipleThemesCompile = require('webpack-multiple-themes-compile') const baseWebpackConfig = require('./webpack.base.conf') const CopyWebpackPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') const ExtractTextPlugin = require('extract-text-webpack-plugin') const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const TransferWebpackPlugin = require('transfer-webpack-plugin') const InjectionHtmlPlugin = require('./../src/plugin/injection-html-plugin') const {join, resolve} = require('path');

const env = require('../config/prod.env')

console.log("process.env.NODE_ENV : ",process.env.NODE_ENV)

const webpackConfig = merge(baseWebpackConfig, { module: { rules: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true, usePostCSS: true }) }, devtool: config.build.productionSourceMap ? config.build.devtool : false, output: { path: config.build.assetsRoot, filename: utils.assetsPath('js/[name].[chunkhash].js'), chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') }, plugins: [ // http://vuejs.github.io/vue-loader/en/workflow/production.html new webpack.DefinePlugin({ 'process.env': env }), new UglifyJsPlugin({ uglifyOptions: { compress: { warnings: false } }, sourceMap: config.build.productionSourceMap, parallel: true }), // extract css into its own file new ExtractTextPlugin({ filename: utils.assetsPath('css/[name].[contenthash].css'), // Setting the following option to false will not extract CSS from codesplit chunks. // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. // It's currently set to true because we are seeing that sourcemaps are included in the codesplit bundle as well when it's false, // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 allChunks: true, }), // Compress extracted CSS. We are using this plugin so that possible // duplicated CSS from different components can be deduped. new OptimizeCSSPlugin({ cssProcessorOptions: config.build.productionSourceMap ? { safe: true, map: { inline: false } } : { safe: true } }), // generate dist index.html with correct asset hash for caching. // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: config.build.index, template: 'index.html', inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true // more options: // https://github.com/kangax/html-minifier#options-quick-reference }, // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency', excludeChunks: ['themes'] }), // keep module.id stable when vendor modules does not change new webpack.HashedModuleIdsPlugin(), // enable scope hoisting new webpack.optimize.ModuleConcatenationPlugin(), // split vendor js into its own file new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', minChunks (module) { // any required modules inside node_modules are extracted to vendor return ( module.resource && /.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }), // extract webpack runtime and module manifest to its own file in order to // prevent vendor hash from being updated whenever app bundle is updated new webpack.optimize.CommonsChunkPlugin({ name: 'manifest', minChunks: Infinity }), // This instance extracts shared chunks from code splitted chunks and bundles them // in a separate chunk, similar to the vendor chunk // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk new webpack.optimize.CommonsChunkPlugin({ name: 'app', async: 'vendor-async', children: true, minChunks: 3 }),

// copy custom static assets
new CopyWebpackPlugin([
  {
    from: path.resolve(__dirname, '../static'),
    to: config.build.assetsSubDirectory,
    ignore: ['.*']
  }
]),
new InjectionHtmlPlugin({
  paths: ["../ssm/config/env.js"]
}),
new TransferWebpackPlugin([{
    from: 'aenv', to: 'config'
}], join(__dirname, './../src'))

] })

if (config.build.productionGzip) { const CompressionWebpackPlugin = require('compression-webpack-plugin')

webpackConfig.plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\.(' + config.build.productionGzipExtensions.join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }) ) }

if (config.build.bundleAnalyzerReport) { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin webpackConfig.plugins.push(new BundleAnalyzerPlugin()) }

module.exports = merge( webpackConfig, multipleThemesCompile({ cacheDir: './src/themes', themesConfig: { purple: { color: '#008000' }, red: { color: '#ffff00' } }, lessContent: 'body{color:@color}' }) )

thanktiger avatar Jul 01 '19 09:07 thanktiger

@thanktiger 建议是试一下 方法二 如果觉得麻烦的话 建议直接使用 webpack-multiple-themes-compile

hiyangguo avatar Jul 01 '19 09:07 hiyangguo

@thanktiger lessContent 改成你的内容。比如:

@import "../../index.less"

hiyangguo avatar Jul 01 '19 09:07 hiyangguo

博主,改了lessContent的路径,保证是正确的,但是会报failed @import "../src/themes/index.less"

thanktiger avatar Jul 01 '19 09:07 thanktiger

@thanktiger 那应该是你的相对路径写错了

hiyangguo avatar Aug 10 '19 13:08 hiyangguo