webpack 分离css html,【已解决】ReactJS中Webpack打包时分离css
之前调试期间发现,css的style是被webpack生成后放到html中的:
后来看到很多资料后得知,单独把css提取出来,是需要用到单独的插件的。
参考:
去试试
ExtractTextPlugin css 作用
ExtractTextPlugin 作用
“一般来说需要引入css-loader和style-loader,其中css-loader用于解析,而style-loader则将解析后的样式嵌入js代码。
将require引入的样式嵌入js文件中,有好处也有坏处。好处是减少了请求数,坏处也很明显,就是当你的样式文件很大时,造成编译的js文件也很大。
我们可以使用插件的方式,将样式抽取成独立的文件。使用的插件就是extract-text-webpack-plugin”
但是后续有很多复杂的说法,目前实在是搞不懂,先不理会。➜ react-hot-boilerplate git:(master) ✗ npm install extract-text-webpack-plugin –save-dev
npm WARN babel-loader@6.2.10 requires a peer of webpack@1 || 2 || ^2.1.0-beta || ^2.2.0-rc but none was installed.
npm WARN react-dom@15.6.1 requires a peer of react@^15.6.1 but none was installed.
added 3 packages in 10.823s
目前用:var ExtractTextPlugin = require("extract-text-webpack-plugin");
new ExtractTextPlugin("styles.css") //将css打包成单独的文件style.css
{
test: /\.css$/,
// use: [‘style-loader’, ‘css-loader’],
// use: [
// { loader: ‘style-loader’ },
// {
// loader: ‘css-loader’,
// options: {
// modules: true
// }
// }
// ],
use: ExtractTextPlugin.extract({
fallback: "style-loader", // 编译后用什么loader来提取css文件
use: "css-loader" // 指需要什么样的loader去编译文件,这里由于源文件是.css所以选择css-loader
}),
include: path.resolve(__dirname, ‘src’)
},
试试效果:
对于已有的一个css文件来说,的确起效果了:
输出时就有:Child extract-text-webpack-plugin ../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/node_modules/extract-text-webpack-plugin/dist ../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/node_modules/css-loader/index.js!../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/src/app.css:
1 asset
[0] ./node_modules/css-loader!./src/app.css 548 bytes {0} [built]
[2] ./src/assets/img/user1-128×128.jpg 79 bytes {0} [built]
+ 1 hidden module
然后最终输出到build的文件夹中也有对应的文件:
然后再去参考:
给less也加上对应的写法:➜ react-hot-boilerplate git:(master) ✗ npm install –save-dev postcss-loader
npm WARN babel-loader@6.2.10 requires a peer of webpack@1 || 2 || ^2.1.0-beta || ^2.2.0-rc but none was installed.
npm WARN react-dom@15.6.1 requires a peer of react@^15.6.1 but none was installed.
added 19 packages in 11.682s
配置写法:var ExtractTextPlugin = require("extract-text-webpack-plugin");
// 多个提取实例
//new ExtractTextPlugin("[name].[hash].css")
const extractCSS = new ExtractTextPlugin(‘stylesheets/[name].css’);
const extractLESS = new ExtractTextPlugin(‘stylesheets/[name].less’);
let commonPlugins = [
// new webpack.ProvidePlugin({
// $: ‘jquery’,
// ‘window.jQuery’: ‘jquery’,
// jQuery: ‘jquery’,
// ‘window.$’: ‘jquery’,
// }),
new webpack.optimize.CommonsChunkPlugin({
name: ‘vendor’,
filename: ‘vendor.bundle.js’
}),
// new webpack.HotModuleReplacementPlugin()
// new ExtractTextPlugin("styles.css")
extractCSS,
extractLESS
];
module.exports = {
plugins: commonPlugins,
module: {
rules: [
…
{
test: /\.css$/,
// use: [‘style-loader’, ‘css-loader’],
// use: [
// { loader: ‘style-loader’ },
// {
// loader: ‘css-loader’,
// options: {
// modules: true
// }
// }
// ],
// use: ExtractTextPlugin.extract({
// fallback: "style-loader", // 编译后用什么loader来提取css文件
// use: "css-loader" // 指需要什么样的loader去编译文件,这里由于源文件是.css所以选择css-loader
// }),
use: extractCSS.extract([ ‘css-loader’, ‘postcss-loader’ ]),
include: path.resolve(__dirname, ‘src’)
},
{
// test: /\.less$/,
// use: [
// {
// loader: "style-loader" // creates style nodes from JS strings
// }, {
// loader: "css-loader" // translates CSS into CommonJS
// }, {
// loader: "less-loader" // compiles Less to CSS
// }
// ]
test: /\.less$/i,
use: extractLESS.extract([ ‘css-loader’, ‘less-loader’ ])
},
}
然后去build看看效果。
期间:
但是结果又出现其他错误:
结果,更郁闷的来了:
虽然可以正常npm run dev了:
但是,连调试都无法调试了:
和:
都无法访问了。。。
然后去:
npm run build➜ react-hot-boilerplate git:(master) ✗ npm run build
> react-hot-boilerplate@1.0.0 prebuild /Users/crifan/dev/dev_root/daryun/Projects/xxxsourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate
> npm run clean
> react-hot-boilerplate@1.0.0 clean /Users/crifan/dev/dev_root/daryun/Projects/xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate
> rm -rf build/ build.zip
> react-hot-boilerplate@1.0.0 build /Users/crifan/dev/dev_root/daryun/Projects/xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate
> cross-env NODE_ENV=production webpack -p –progress –colors
process.env.NODE_ENV=production, isProd=true
Hash: 684ce2244b76de7df4b1
Version: webpack 3.5.4
Time: 23788ms
Asset Size Chunks Chunk Names
dist/img/boxed-bg.png 43.7 kB [emitted]
dist/img/user1-128x128_vykxhX.jpg 2.88 kB [emitted]
vendor.bundle.js 102 kB 1 [emitted] vendor
stylesheets/index.css 375 bytes 0 [emitted] index
index.html 2.55 kB [emitted]
dist/.DS_Store 6.15 kB [emitted]
dist/img/avatar3.png 9.78 kB [emitted]
dist/img/avatar2.png 8.84 kB [emitted]
dist/img/avatar5.png 8.01 kB [emitted]
dist/img/avatar.png 8.54 kB [emitted]
dist/img/.DS_Store 6.15 kB [emitted]
dist/img/avatar04.png 14 kB [emitted]
dist/img/credit/american-express.png 2.21 kB [emitted]
dist/img/credit/cirrus.png 1.59 kB [emitted]
dist/img/boxed-bg.jpg 124 kB [emitted]
index.js 1.12 MB 0 [emitted] [big] index
dist/img/credit/mastercard.png 1.59 kB [emitted]
dist/img/credit/paypal.png 2.05 kB [emitted]
dist/img/credit/mestro.png 1.59 kB [emitted]
dist/img/credit/paypal2.png 1.37 kB [emitted]
dist/img/user1-128×128.jpg 2.88 kB [emitted]
dist/img/credit/visa.png 1.14 kB [emitted]
dist/img/icons.png 1.15 kB [emitted]
dist/img/default-50×50.gif 184 bytes [emitted]
dist/img/user4-128×128.jpg 3.48 kB [emitted]
dist/img/user2-160×160.jpg 7.07 kB [emitted]
dist/img/user3-128×128.jpg 3.51 kB [emitted]
dist/img/user5-128×128.jpg 6.45 kB [emitted]
dist/img/user8-128×128.jpg 5.06 kB [emitted]
dist/img/user6-128×128.jpg 4.34 kB [emitted]
dist/img/user7-128×128.jpg 6.43 kB [emitted]
[166] (webpack)/buildin/global.js 509 bytes {1} [built]
[464] ./src/index.js 590 bytes {0} [built]
[553] ./src/App.js 14.7 kB {0} [built]
[965] ./src/app.css 41 bytes {0} [built]
[966] multi babel-polyfill react-hot-loader/patch ./src/adminlte_app.js 52 bytes {1} [built]
[1175] ./src/adminlte_app.js 22.6 kB {1} [built]
[1177] ./src/assets/img/user1-128×128.jpg 79 bytes [built]
+ 1171 hidden modules
Child extract-text-webpack-plugin ../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/node_modules/extract-text-webpack-plugin/dist ../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/node_modules/css-loader/index.js!../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/node_modules/postcss-loader/lib/index.js!../../../../../../../xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate/src/app.css:
1 asset
[0] ./node_modules/css-loader!./node_modules/postcss-loader/lib!./src/app.css 548 bytes {0} [built]
[2] ./src/assets/img/user1-128×128.jpg 79 bytes {0} [built]
+ 1 hidden module
> react-hot-boilerplate@1.0.0 postbuild /Users/crifan/dev/dev_root/daryun/Projects/xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate
> npm run package
> react-hot-boilerplate@1.0.0 package /Users/crifan/dev/dev_root/daryun/Projects/xxx/sourcecode/web/AdminManagement/reference/react-hot-boilerplate/react-hot-boilerplate
> zip -r build.zip build/
adding: build/ (stored 0%)
adding: build/dist/ (stored 0%)
adding: build/dist/.DS_Store (deflated 93%)
adding: build/dist/img/ (stored 0%)
adding: build/dist/img/.DS_Store (deflated 97%)
adding: build/dist/img/avatar.png (stored 0%)
adding: build/dist/img/avatar04.png (stored 0%)
adding: build/dist/img/avatar2.png (stored 0%)
adding: build/dist/img/avatar3.png (stored 0%)
adding: build/dist/img/avatar5.png (stored 0%)
adding: build/dist/img/boxed-bg.jpg (deflated 7%)
adding: build/dist/img/boxed-bg.png (deflated 0%)
adding: build/dist/img/credit/ (stored 0%)
adding: build/dist/img/credit/american-express.png (stored 0%)
adding: build/dist/img/credit/cirrus.png (stored 0%)
adding: build/dist/img/credit/mastercard.png (stored 0%)
adding: build/dist/img/credit/mestro.png (stored 0%)
adding: build/dist/img/credit/paypal.png (stored 0%)
adding: build/dist/img/credit/paypal2.png (stored 0%)
adding: build/dist/img/credit/visa.png (stored 0%)
adding: build/dist/img/default-50×50.gif (deflated 7%)
adding: build/dist/img/icons.png (deflated 2%)
adding: build/dist/img/user1-128×128.jpg (deflated 5%)
adding: build/dist/img/user1-128x128_vykxhX.jpg (deflated 5%)
adding: build/dist/img/user2-160×160.jpg (deflated 3%)
adding: build/dist/img/user3-128×128.jpg (deflated 5%)
adding: build/dist/img/user4-128×128.jpg (deflated 0%)
adding: build/dist/img/user5-128×128.jpg (deflated 2%)
adding: build/dist/img/user6-128×128.jpg (deflated 3%)
adding: build/dist/img/user7-128×128.jpg (deflated 2%)
adding: build/dist/img/user8-128×128.jpg (deflated 3%)
adding: build/index.html (deflated 68%)
adding: build/index.js (deflated 69%)
adding: build/stylesheets/ (stored 0%)
adding: build/stylesheets/index.css (deflated 39%)
adding: build/vendor.bundle.js (deflated 68%)
之后
再去打开:
或:
都还是可以正常调试的。
但是css是丢失了:
所以是:
虽然是把css分离了,结果却丢失了。。。
所以要继续解决:
【总结】
至此,也就基本上实现了,通过ExtractTextPlugin插件去从css(甚至less,sass等文件)中提取出来最终的css文件,输出到output.path的文件夹中了。
然后通过确保html中link引用了这些css文件后,就可以正常生效了。
然后附上此处的,单个实例的ExtractTextPlugin的配置:// import CopyWebpackPlugin from ‘copy-webpack-plugin’;
var CopyWebpackPlugin = require(‘copy-webpack-plugin’);
var path = require(‘path’);
var webpack = require(‘webpack’);
var ExtractTextPlugin = require(‘extract-text-webpack-plugin’);
// const ENV = process.env.NODE_ENV || ‘development’;
var isProd = (process.env.NODE_ENV === ‘production’);
console.log(`process.env.NODE_ENV=${process.env.NODE_ENV}, isProd=${isProd}`);
//process.env.NODE_ENV=development, isProd=false
// 多个提取实例
// new ExtractTextPlugin("[name].[hash].css");
// new ExtractTextPlugin("[name].css");
// const extractCSS = new ExtractTextPlugin(‘stylesheets/[name].css’);
// const extractLESS = new ExtractTextPlugin(‘stylesheets/[name].less’);
let commonPlugins = [
// new webpack.ProvidePlugin({
// $: ‘jquery’,
// ‘window.jQuery’: ‘jquery’,
// jQuery: ‘jquery’,
// ‘window.$’: ‘jquery’,
// }),
new webpack.optimize.CommonsChunkPlugin({
name: ‘vendor’,
filename: ‘vendor.bundle.js’
}),
// new webpack.HotModuleReplacementPlugin()
new ExtractTextPlugin(‘styles.css’)
// extractCSS,
// extractLESS
];
if (isProd) {
// Note: current not add UglifyJsPlugin for production for:
// when webpack -p, it will auto added UglifyJsPlugin, then omit here UglifyJsPlugin settings
// commonPlugins.push(
// new webpack.optimize.UglifyJsPlugin({
// minimize: true
// })
// );
commonPlugins.push(
new CopyWebpackPlugin([
{ from: ‘./index.html’ },
{ from: ‘src/assets’, to: ‘dist’ },
])
);
}
module.exports = {
entry: {
index: ‘./src/index.js’,
vendor : [
‘babel-polyfill’, // Set up an ES6-ish environment
‘react-hot-loader/patch’,
‘./src/adminlte_app.js’
],
},
output: {
path: path.resolve(__dirname, ‘build’),
filename: ‘[name].js’,
publicPath: ‘/adminlte/’
},
// devtool: isProd ? ‘cheap-module-source-map’ : ‘eval’,
devtool: isProd ? ‘false’ : ‘eval’,
devServer: {
// hot: true,
contentBase: path.resolve(__dirname, ‘build’),
publicPath: path.resolve(__dirname, ‘/adminlte/’),
// publicPath: path.resolve(__dirname, ‘/devServerPublicPath/’),
compress: true,
port: 3000,
historyApiFallback: true
},
plugins: commonPlugins,
module: {
rules: [
{
test: /\.jsx?$/, // 匹配’js’ or ‘jsx’ 后缀的文件类型
// use: [‘react-hot-loader’, ‘babel-loader’],
include: path.resolve(__dirname, ‘src’),
// exclude: /(node_modules|bower_components)/,
exclude: [
path.resolve(__dirname, ‘node_modules’),
path.resolve(__dirname, ‘bower_components’)
],
// use: ‘babel-loader’,
use: {
loader: ‘babel-loader’,
options: {
presets: [‘env’, ‘stage-0’, ‘react’],
plugins: [‘transform-runtime’, ‘react-hot-loader/babel’]
}
}
},
{
test: /\.css$/,
// use: [‘style-loader’, ‘css-loader’],
// use: [
// { loader: ‘style-loader’ },
// {
// loader: ‘css-loader’,
// options: {
// modules: true
// }
// }
// ],
use: ExtractTextPlugin.extract({
fallback: ‘style-loader’, // 编译后用什么loader来提取css文件
use: ‘css-loader’ // 指需要什么样的loader去编译文件,这里由于源文件是.css所以选择css-loader
}),
// use: extractCSS.extract([ ‘css-loader’, ‘postcss-loader’ ]),
// use: extractCSS.extract([
// ‘css-loader’,
// {
// loader: ‘postcss-loader’,
// options: {
// // plugins: () => [require(‘autoprefixer’)]
// }
// }
// ]),
include: path.resolve(__dirname, ‘src’)
},
{
test: /\.less$/,
use: [
{
loader: ‘style-loader’ // creates style nodes from JS strings
}, {
loader: ‘css-loader’ // translates CSS into CommonJS
}, {
loader: ‘less-loader’ // compiles Less to CSS
}
]
// test: /\.less$/i,
// use: extractLESS.extract([ ‘css-loader’, ‘less-loader’ ])
},
{
test: /\.(svg|woff2?|ttf|eot|jpe?g|png|gif)$/i,
//development use url-loader, production use file-loader
use :
// use: isProd ?
// {
// loader: ‘file-loader’,
// query: {
// // name: ‘[path][name].[ext]?[md5:hash:base64:6]’
// //name: ‘[path][name]_[md5:hash:base64:6].[ext]’
// name: ‘[name]_[md5:hash:base64:6].[ext]’
// }
// } :
{
loader: ‘url-loader’,
query: {
// inline base64 DataURL for <=2KB images, direct URLs for the rest
// limit: 4096,
limit: 2048,
// name: ‘[name]_[md5:hash:base64:6].[ext]’
name: ‘dist/img/[name]_[md5:hash:base64:6].[ext]’
// prefix: ‘/adminlte/’
}
}
}
]
},
resolve: {
// you can now import file without suffix
extensions: [‘*’, ‘.jsx’, ‘.js’, ‘.json’, ‘.less’]
}
};
供参考。
至于多实例的ExtractTextPlugin,以后有了更多的css,less等文件后,再继续折腾。
webpack 分离css html,【已解决】ReactJS中Webpack打包时分离css相关推荐
- css的背景图片不显示,wepback打包时,css的背景图片显示不出来,求教!
如题.项目环境使用 webpack 构建的,webpack 这块配置的相关代码是 module: { loaders: [ { test: /\.(js|jsx)$/, exclude: /node_ ...
- idea中 maven打包时时报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml,
第一种错误 :idea中 maven打包时时报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml, 解决方案如下:将ma ...
- 解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory...
解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 如上图所示:频繁出现此 ...
- 解决Word2010中插入图片时变成空白框问题
前一段时间系统提示内存不够,后来在Word2010/2007中点击"插入-图片"向文档中添加图片时,图片仅显示为空白边框?为什么会这样呢? 当内存不够或者 Word 程序崩溃时,可 ...
- 【已解决】Html Webpack Plugin Error;html-withimg-loader无法正常解析html内的img
升级webpack之后发现原本之前用的好好的配置报错了: 控制台报错: ERROR in Error: Parse Error: <img src={"default":&q ...
- QT 触控事件和鼠标事件的分离(问题已解决)
问题:QT图形视图框架,QGraphicsScene中默认接收触控事件,会将第一个点当作鼠标事件处理. 在开发者开发的时候,可能会有这样的需求,希望自己的触控事件和鼠标事件能够分割开来. 找到的解决方 ...
- php 静态 成员属性,[已解决]php中静态成员方法和静态成员变量是不是不支持多态?...
各位大神好,我实现了一个日志工具基类,并派生了两个子类,一个是运维日志类,一个是业务日志类,并在基类中设置了一个静态变量希望能用以区分两个子类,但在调用静态方法时,实际上完全不是想象中的情况,代码如下 ...
- [已解决]Keil 中出现No Browse Information available in ‘工程文件‘的
在查看程序时想要Go to Definition of 'xxx' 但是会出现如图所示的提醒: 解决方法: 点击魔术棒,再在Output的选项中勾选Browse Information,如此就可以正 ...
- linux少了 dev dm设备,已解决: Linux中安装了powerpath之后为什么还会有dm设备? - Dell Community...
在RHEL6.3中安装了powerpath5.7之后,OS上已经正确生成了emcpower磁盘设备(使用CX4-240存储),并配置到LVM中使用.但是今天发现,使用iostat命令时,可以看到dm设 ...
- 【已解决】LaTeX使用natbib时,在正文使用authoryear格式,但是在reference中使用数字编号
文章目录 前言 方案 小结 参考文献 前言 如题,给出解决方案.关键在于:\setcitestyle{numbers} 方案 \documentclass[]{article}% 预定义一些参数 % ...
最新文章
- [dp] Jzoj P5804 简单的序列
- Visual Studio 2005 Beta2 简体中文版发布
- #1097 : 最小生成树一·Prim算法
- 网络协议基础:“工作中模模糊糊的概念,这次终于理顺了!”
- python相册管理系统_Django实现一个相片管理系统01
- java 0-9所有排列_java实现:键盘输入从0~9中任意5个数,排列组合出所有不重复的组合,打印出来...
- python list元素合并_Python-列表+-01-两个列表各元素合并
- a href 下载文件乱码
- vj p1025题解
- opencl初探-sobel检测
- cam350菜单怎么切换成中文_CAM350菜单中文详解
- 多年 iOS 开发经验总结
- 【H5调用iOS原生高德定位】
- 联想服务器自动关机_联想电脑设置自动关机
- 误差平方和用python_用Python学分析 - 单因素方差分析
- C语言之-1与0xffffffff
- 一个大二计算机学生的学期总结(2022末年)
- ElasticSearch 从5.6.3升级到7.9.3遇到问题总结
- 2022年5月26日:用C#生成.NET应用程序--创建新的.NET项目并使用依赖项(部分没看懂。)
- python人脸识别解锁电脑_Python 实现在 App 端的人脸识别!手机解锁人脸识别!
热门文章
- phpcmsv9 更换域名出现页面无法访问后怎么办
- 18. CSS 内边距
- 15. 从远程库克隆
- python 并发编程 socket 服务端 客户端 阻塞io行为
- Linux学习之安装jdk
- Python爬虫开发【第1篇】【Requests】
- MySQL · 引擎特性 · 基于InnoDB的物理复制实现(转载)
- day 34 进程线程排序 抢票 初级生产者消费者
- org.springframework.stereotype 注解
- uva11992-Fast Matrix Operations(区间增值、改值)