Vue Webpack 构建打破了 Bulma CSS
Posted
技术标签:
【中文标题】Vue Webpack 构建打破了 Bulma CSS【英文标题】:Vue Webpack Build Breaks Bulma CSS 【发布时间】:2017-12-30 17:31:32 【问题描述】:我使用 vue-cli 为我的 vue 项目搭建了一个 webpack 模板。随后,我添加了 Bulma 的 CSS。当我正常运行程序(npm run dev)时,CSS 会正确呈现。但是,在使用默认的 webpack 配置构建生产项目(npm run build)时,web 应用程序的样式现在错位了。有谁知道如何解决这个问题?
比较:
Production Build of Vue with broken CSS
Dev version of Vue rendering CSS properly
以下是我的 webpack 配置(webpack.prod.conf.js)
var path = require('path')
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var CopyWebpackPlugin = require('copy-webpack-plugin')
var htmlWebpackPlugin = require('html-webpack-plugin')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
var env = config.build.env
var webpackConfig = merge(baseWebpackConfig,
module:
rules: utils.styleLoaders(
sourceMap: config.build.productionSourceMap,
extract: true
)
,
devtool: config.build.productionSourceMap ? '#source-map' : 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 webpack.optimize.UglifyJsPlugin(
compress:
warnings: false
,
sourceMap: true
),
// extract css into its own file
new ExtractTextPlugin(
filename: utils.assetsPath('css/[name].[contenthash].css')
),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin(
cssProcessorOptions:
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'
),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin(
name: 'vendor',
minChunks: function (module, count)
// 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',
chunks: ['vendor']
),
// copy custom static assets
new CopyWebpackPlugin([
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
])
]
)
if (config.build.productionGzip)
var 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)
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
module.exports = webpackConfig
【问题讨论】:
【参考方案1】:我遇到了和你一样的问题。经过一番调试,我意识到这是由于 css 规则的顺序。看来构建的css文件和dev server的规则顺序不一样。
我对这个主题进行了一些搜索。在 webpack 文档中我发现了这个:
请记住,管理模块的执行顺序很困难,因此请设计样式表,让顺序无关紧要。 (但是,您可以依赖给定 CSS 文件中的顺序。)
我通过使用#id
而不是.class
来增加我的自定义css 选择器的特异性解决了我的问题。
例如:
// my custom css rules
#navbar a
color: white
代替:
// my custom css rules
.navbar a
color: white
因此,您的自定义规则与 bulma 规则的顺序无关紧要,因为id
的优先级始终高于class
选择器。
希望对你有用
【讨论】:
以上是关于Vue Webpack 构建打破了 Bulma CSS的主要内容,如果未能解决你的问题,请参考以下文章
Bulma navbar-burger 未连接到 Vue.js 2 中的菜单项
是否可以将 Vue Admin (Bulma) 包含到 Laravel 中?
在 Vue3 中使用 Font Awesome 和 Bulma