博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack核心概念使用的综合小案例
阅读量:4843 次
发布时间:2019-06-11

本文共 6763 字,大约阅读时间需要 22 分钟。

注:

由于版本更新很快,同样的配置不同版本很可能会出错(这个就很绝望了)

解决思路

  1. 看文档
  2. 查看源码接口
  3. 网上搜索相应错误

环境

webpack4.x + yarn

文件结构

.├── dist //打包输出目录├── package.json├── postcss.config.js├── rules_config //module 中各种文件到导入处理│   ├── babel-polyfill.js│   ├── babel-runtime.js│   ├── css.js│   ├── font.js│   ├── images.js│   └── less.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├── webpack.config.build.js├── webpack.config.bundle.js├── webpack.config.serve.js└── yarn.lock

 

package.json

{  "name": "sample",  "version": "1.0.0",  "private": true,  "license": "MIT",  "scripts": {    "bundle": "webpack --config webpack.config.bundle.js",    "serve": "webpack-dev-server --config webpack.config.serve.js",    "build": "webpack --config webpack.config.build.js"  },  "devDependencies": {    "@babel/core": "^7.4.5",    "@babel/plugin-transform-runtime": "^7.4.4",    "@babel/polyfill": "^7.4.4",    "@babel/preset-env": "^7.4.5",    "@babel/runtime": "^7.4.5",    "@babel/runtime-corejs2": "^7.4.5",    "autoprefixer": "^9.6.0",    "babel-loader": "^8.0.6",    "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",    "webpack-dev-server": "^3.7.1"  },  "browserslist": [    "last 2 versions"  ]}

 

可用的命令

  • yarn build //打包生产环境的代码
  • yarn serve //运行本地服务器
  • yarn bundle //打包开发环境的代码(未压缩)
  • yarn add -D [pagckage-name] //添加开发依赖包
  • yarn install  [pagckage-name] //安装包

 

打包配置文件

webpack.config.bundle.js
const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const {CleanWebpackPlugin} = require('clean-webpack-plugin');module.exports = {    entry: {        app: './src/js/app.js' //入口js文件    },    output: {        filename: "[hash:8]--[name].js", //输出的js文件名        path: path.resolve(__dirname, 'dist'), //输出目录(必须是绝对路径)        // publicPath: "https://192.168.1.106:6655" //用于CDN    },    mode: "development", //开发环境    devtool: "cheap-module-eval-source-map",    module: {        rules: [            require('./rules_config/css.js'),            require('./rules_config/less.js'),            require('./rules_config/images.js'),            require('./rules_config/font.js'),            {                test: /\.js$/,                exclude: /node_modules/,                loader: "babel-loader",                options: require('./rules_config/babel-polyfill.js'),                // options: require('./rules_config/babel-runtime.js'),            }        ]    },    plugins: [        new HtmlWebpackPlugin({ //生成模版html,自动注入打包的js文件            template: './view/index.html'        }),        new CleanWebpackPlugin(), //清除dist目录的内容    ],    stats: {children: false} //避免 Entrypoint undefined = index.html};
 
webpack.config.serve.js
const md = require('./webpack.config.bundle.js');const path = require('path');const serve = {    devServer: {        contentBase: path.resolve(__dirname, 'dist'),        port: 12986,        hot: true,        hotOnly: true,        open: true    }};Object.assign(md, serve);const webpack = require('webpack');md.plugins.push(new webpack.HotModuleReplacementPlugin());module.exports = md;
 
webpack.config.build.js
const md = require('./webpack.config.bundle.js');const build = {    mode: "production", //用于线上(生成环境)    devtool: "cheap-module-source-map",};Object.assign(md, build);module.exports = md;

 

处理各种文件(loader)的配置
css 文件
module.exports = {    test: /.css$/,    use: [        'style-loader',        {            loader: "css-loader",            options: {                importLoaders: 1            }        },        'postcss-loader'    ]};
 

 

less 文件
module.exports = {    test: /\.less$/,    use: [        'style-loader',        {            loader: "css-loader",            options: {                modules: true,                importLoaders: 2            }        },        'less-loader',        "postcss-loader"    ]};
 

 

js 文件,主要出es6转es5
全局替换,用于应用
module.exports = {    "presets": [        [            "@babel/preset-env",            {                "targets": {                    "edge": "17",                    "firefox": "60",                    "chrome": "67",                    "safari": "11.1",                    "ie": "9"                },                "useBuiltIns": "usage", //按需引入                "corejs": "2",            }        ]    ],};
 

 

局部替换,用于框架/库
module.exports = {    "plugins": [        [            "@babel/plugin-transform-runtime",            {                "absoluteRuntime": false,                "corejs": 2,                "helpers": true,                "regenerator": true,                "useESModules": false            }        ]    ]};
 

 

font 文件
module.exports = {    test: /\.(eot|svg|ttf|woff|woff2)$/,    loader: "file-loader",    options: {        name: '[hash:8]--[name].[ext]',    }};
 

 

图片文件
module.exports = {    test: /\.(png|jpg|gif)$/,    loader: "url-loader",    options: {        name: '[hash:8]--[name].[ext]',        outputPath: 'images', //输出目录中的images的目录下        limit: 8 * 1024, //小于8K 转成 base64字符串    }};
 

 

样式相关的文件

/src/sheet/css.css
*{    padding: 0;    margin: 0;}.at{    transform: translate(30px, 30px);    color: red;}

 

/src/sheet/less.less
.lt{  transform: translate(unit(100, px), unit(100, px));  color: chocolate;}

 

postcss.config.js //用于使用 postcss-loader
module.exports = {    plugins: [        require('autoprefixer')    ],};

 

/view/index.html 模版文件

    
Title

1111111

全局的

模块化样式测试1(局部样式,代码中添加)

模块化样式测试2(没有在代码中添加类)

 

测试使用的代码 /src/js/app.js

// 全局样式import '../sheet/css.css';import '../fonts/iconfont.css';// 样式模块化测试import less from '../sheet/less.less';window.document.querySelector('.lt').classList.add(less.lt);// 图片测试 > 8 Klet img = new Image();img.src = require('../images/1.png');window.document.querySelector('#img1').appendChild(img);// 图片测试 < 8 Kimg = new Image();img.src = require('../images/2.png');window.document.querySelector('#img2').appendChild(img);// es6 语法,按需加载const es6m = (a, b)=>{    return new Promise(resolve => {        resolve(a + b);    });};(async function () {    const ret = await es6m('afn111', 'b11');    console.log(ret);})();// 普通的js导入测试11import './math.js';// HMRif(module.hot){    module.hot.accept(['./math.js'], function () {        console.log('213')    });}

 

font文件夹中的内容

阿里巴巴矢量图标库   中下载的压缩包中的字体文件

 

转载于:https://www.cnblogs.com/heidekeyi/p/11009586.html

你可能感兴趣的文章
[中国寒龙出品]VB程序设计视频第十四课,更多请关注我们的官博。
查看>>
LinuxMint 17.1 Cinnamon桌面窗口焦点bug
查看>>
PHP函数
查看>>
缩点 CF893C Rumor
查看>>
Spring详解篇之 AOP面向切面编程
查看>>
COMP0037 Coursework
查看>>
Java第三次作业
查看>>
数据库的安装步骤
查看>>
关于一些基础的Java问题的解答(七)
查看>>
迭代器模式
查看>>
python写简单的图形界面汉诺塔解题器
查看>>
Wabacus框架
查看>>
安卓titlebar的组合控件使用
查看>>
MYSQL提权的各种姿势
查看>>
网页里如何使用js禁用F12事件
查看>>
Linux 指令
查看>>
头文件与类的区别是什么??
查看>>
PHP的一些 有用但不常用的函数记录
查看>>
Vsftp安装配置实例-red9.0
查看>>
俞敏洪:成功从追女孩开始追一个女孩子背后的人生哲学
查看>>