demo_static_resrouce
环境
win10 + webstorm 2019.1.3 + node 12.x + yarn
实现的的功能
- 基本的js打包(支持规范:ES6 module | requirejs | commonjs)
- 打包样式css、less,样式的模块化 ,增加样式的厂商前缀
- 打包字体
- 打包图片(小于8K的转base64字符串)
- 自动注入打包后的js文件
- 自动清理打包目录(只留下最后一次成功打包的文件)
文件结构
. ├── bulid-webpack.config.js //生成模式配置 ├── dev-webpack.config.js //开发模式配置 ├── dist //打包后的目录 │ ├── 07d95431--app.js │ ├── 07d95431--app.js.map │ ├── 524c08db--iconfont.eot │ ├── a8ed3992--iconfont.woff │ ├── c4b92501--iconfont.svg │ ├── f4a753e6--iconfont.ttf │ ├── images │ │ └── 83ac0039--1.png │ └── index.html ├── package.json ├── postcss.config.js ├── src │ ├── fonts //字体 │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ ├── images //图片 │ │ ├── 1.png │ │ └── 2.png │ ├── js │ │ ├── app.js │ │ └── math.js │ └── sheet │ ├── css.css // │ └── less.less // ├── view │ └── index.html // └── yarn.lock //
package.json
{ "name": "sample", "version": "1.0.0", "private": true, "license": "MIT", "scripts": { "dev": "webpack --config dev-webpack.config.js", "build": "webpack --config bulid-webpack.config.js" }, "devDependencies": { "autoprefixer": "^9.6.0", "clean-webpack-plugin": "^3.0.0", "css-loader": "^2.1.1", "file-loader": "^4.0.0", "html-webpack-plugin": "^3.2.0", "less": "^3.9.0", "less-loader": "^5.0.0", "postcss-loader": "^3.0.0", "style-loader": "^0.23.1", "url-loader": "^2.0.0", "webpack": "^4.33.0", "webpack-cli": "^3.3.3" }, "browserslist": [ //支持的浏览器,主流浏览器最后2个版本,用于样式添加厂商前缀 "last 2 versions" ] }
webapck.config
dev-webpack.config.js (yarn dev)
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const {CleanWebpackPlugin} = require('clean-webpack-plugin'); module.exports = { entry: { app: './src/js/app.js' }, output: { filename: "[hash:8]--[name].js", path: path.resolve(__dirname, 'dist'), // publicPath: "https://192.168.1.106:6655" //用于CND之类 }, mode: "development", devtool: "cheap-module-eval-source-map", module: { rules: [ { test: /.css$/, use: [ 'style-loader', { loader: "css-loader", options: { importLoaders: 1 } }, 'postcss-loader' ] }, { test: /\.less$/, use: [ 'style-loader', { loader: "css-loader", options: { modules: true, importLoaders: 2 } }, 'less-loader', "postcss-loader", ] }, { test: /\.(png|jpg|gif)$/, use: { loader: "url-loader", options: { name: '[hash:8]--[name].[ext]', outputPath: 'images', limit: 8 * 1024, } } }, { test: /\.(eot|svg|ttf|woff|woff2)$/, use: { loader: "file-loader", options: { name: '[hash:8]--[name].[ext]', } } } ] }, plugins: [ new HtmlWebpackPlugin({ //拷贝到输出目录,并注入打包后的js文件 template: "./view/index.html" }), new CleanWebpackPlugin(), //清除输出目录中的文件 ] };
bulid-webpack.config.js (yarn build)
const md = require('./dev-webpack.config.js'); const build = { //不一样的就这两个部分 mode: "production", devtool: "cheap-module-source-map", }; Object.assign(md, build); module.exports = md;
postcss.config.js
module.exports = { plugins: [ require('autoprefixer') //使用插件autoprefixer, 用于增加厂商前缀 ], };
view 下的 index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="font-size: 100px; background: coral"> <i class="iconfont icon-icon-test"></i> <i class="iconfont icon-icon-test1"></i> <i class="iconfont icon-icon-test2"></i> </div> <div id="img1" style="width: 100px; height: 150px; overflow: hidden"></div> <div id="img2"></div> <h1 class="at">全局的</h1> <h1 class="lt">模块化样式测试1(局部样式,代码中添加)</h1> <div style="height: 200px"></div> <h1 class="lt">模块化样式测试2(没有在代码中添加类)</h1> </body> </html>
样式
css
*{ padding: 0; margin: 0; } .at{ transform: translate(100px, 100px); color: aqua; }
less
.lt{ transform: translate(unit(100, px), unit(100, px)); color: chocolate; }
js
app.js
// 全局样式 import '../sheet/css.css'; import '../fonts/iconfont.css'; // 普通的js导入测试 import math from './math.js'; console.log('add(11, 11): ', math.add(11, 11)); console.log('mul(11, 11): ', math.mul(11, 11)); console.log('sub(110, 11): ', math.sub(110, 11)); // 样式模块化测试 import less from '../sheet/less.less'; window.document.querySelector('.lt').classList.add(less.lt); // 图片测试 > 8 K let img = new Image(); img.src = require('../images/1.png'); window.document.querySelector('#img1').appendChild(img); // 图片测试 < 8 K img = new Image(); img.src = require('../images/2.png'); window.document.querySelector('#img2').appendChild(img);
math.js
export default { sub: function (a, b) { return a - b; }, add: function (a, b) { return a + b; }, mul: function (a, b) { return a * b; } }
fonts目录: Iconfont-阿里巴巴矢量图标库 (https://www.iconfont.cn/)上下载的文件
dist 目录:打包后的文件结构
注:yarn dev 和 yarn build 打包后的文件有点不同(后者有.map文件)
demo_static_resrouce的更多相关文章
随机推荐
- WPF 有趣的动画效果
WPF 有趣的动画效果 这一次我要呈上一个简单的文章,关于给你的WPF apps加入美丽的光线动画,可是我对动画这东西可能有点入迷了. 实际上.我对动画如此的入迷,以至 ...
- Python3基础(七) I/O操作
一个程序可以从键盘读取输入,也可以从文件读取输入:而程序的结果可以输出到屏幕上,也可以保存到文件中便于以后使用.本文介绍Python中最基本的I/O函数. 一.控制台I/O 读取键盘输入 内置函数in ...
- POJ 1861 Network (Kruskal求MST模板题)
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14103 Accepted: 5528 Specia ...
- 使用VS2005安装和编译QT4.53源码
学习Qt,当然是QT4好.可是装了4.86以后,网上下载的书中的例子大多无法直接用VS执行(个人不喜欢用QT Creator),即打开pro转换的时候出错(我也懒的研究为什么出错了).看了一下发布时间 ...
- Flink之Window Operation
目录 Configuring Time Characteristics Process Functions Window Operators Applying Functions on Windows ...
- P2924 [USACO08DEC]大栅栏Largest Fence
传送门 反正我是看不出来这题和凸包有什么关系--大佬们是怎么想到的-- 不准确一点的说,本题就是要我们求一个边上点数最多的凸包 我们可以先把所有的边都取出来,然后按极角排序.枚举这个凸包的起点,然后做 ...
- 使用Keras做OCR时报错:ValueError: Tensor Tensor is not an element of this graph
现象 项目使用 Flask + Keras + Tensorflow 同样的代码在机器A和B上都能正常运行,但在机器C上就会报如下异常.机器A和B的环境是先安装的,运行.调试成功后才尝试在C上跑. F ...
- [Swift通天遁地]七、数据与安全-(9)文件的压缩和解压
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Visual Studio Code配置GitHub(Win7环境)
一.软件环境说明(演示环境) 1.操作系统:Windows7旗舰版(64bit) 2.Visual Studio Code版本:1.32.3 3.Git版本:2.21.0.windows.1 二.软件 ...
- PKUSC2017 游记 密码:blog密码
退役之前,写点破事乐呵乐呵 省选滚大粗 报了PKU和THU的SC 果然THU直接审核不通过... 于是就来到了PKU 滚粗狗就又续命几天. Day1 上午考数学 喜闻乐见啥都不会 出来一对题 ...