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的更多相关文章
随机推荐
- Photoshop 手动画金标准流程
以下给出Photoshop手动画金标准的流程, 1. 读取 图片 2. 找到套锁button 3. 利用套锁button手动画金标准 4. 点击套锁区域.右键新建图层 此时能够看到右側出现新建的图层1 ...
- WingIDE 5.0注冊机
在wingIDE下开发python很方便,但IDE不是免费的,网上有破解的方法.请支持正版. 把下列文件CalcActivationCode.py载入到wingIDE中.LicenseID能够随便给一 ...
- torch lua tips
1.luarocks 离线安装Moses 下载 Moses-Moses-1.6.1-1.zip cd Moses-Moses-1.6.1-1 Moses-Moses-1.6.1-1# luarocks ...
- android学习笔记:adb更换端口后成功启动
搭建手机开发环境,android ADT,android SDK,然后按照PhoneGap官网的指引,拷贝文件,修改代码,运行,进度条到了某个位置后就停止不动了. 停止不动,又是停止不动.你都不知道问 ...
- E20170706-sl
erode vt. 侵蚀,腐蚀 vi. 逐渐毁坏; 削弱,损害; thin adj. 薄的; 瘦的; 细的; 稀少的; laptop n. 便携式电脑;
- E20170624-ts
stateless adj. 无国家的,无国籍的; groupware 群件 cookie n. 饼干; 小甜点; 吸引人的年轻妇女; 甜面包; session n. 开会,会议; (法庭的) 开 ...
- Java的安装过程
记录一下自己在Windowns下安装java的过程 安装网址:http://www.oracle.com/index.html 打开网址后要先登录,如果没有号就先注册,然后才能下载 step1:下载J ...
- redis取经之路
redis基本数据结构 Redis使用的是自己构建的简单动态字符串(SDS)[simple dynamic string,SDS]的抽象类型,并将SDS用做Rdis的默认字符串表示 redis> ...
- CSS元素超出部分滚动,并隐藏滚动条
方法一, 利用 css 3 的新特性 -webkit-scrollbar, 但是这种方式不兼容 火狐 和 IE <!DOCTYPE html> <html> <head ...
- IE版本的判断
var Sys = {};var ua = navigator.userAgent.toLowerCase(); var s;(s = ua.match(/msie ([\d.]+)/)) ? Sys ...