基于Webpack5 搭建HTMl+Less的前端项目

  1. 新建一个文件夹(比如命名为webpack)

  2. 用编辑器打开该文件夹,并在编辑器的终端执行 npm init -y 自动创建package.json 文件

  3. 新建 src/pages/home 目录文件夹 并创建index.html index.js index.less 文件
    index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= htmlWebpackPlugin.options.title %></title>
    </head>
    <body>
    <div class="title">webpack5</div>
    <div id="app"></div>
    </body>
    </html>

    index.js

    require('./index.less')
    import imgUrl from '@static/images/webpack5.jpeg' const app = document.getElementById('app')
    var img = new Image()
    img.src = imgUrl
    img.width = 500
    app.appendChild(img)

    index.less

    .title {
    font-size: 20px;
    font-weight: bold;
    color: red;
    text-align: center;
    }
    #app{
     text-align: center;
    }
  4.   安装webpak 以及相关插件的包
    #webpack 运行以及html文件生成所用的包
    npm install webpack webpack-cli html-webpack-plugin webpack-dev-server clean-webpack-plugin -D

    # 解析less文件需要的webpack插件
     npm install less less-loader css-loader style-loader -D  

    #抽取 css文件以及压缩css js需要的webpack插件
     npm install mini-css-extract-plugin css-minimizer-webpack-plugin terser-webpack-plugin  -D

    #拷贝静态文件以及图片压缩所需插件(按需使用)(imagemin-webpack-plugin 需要使用cnpm下载用npm启动会报错,原因暂不明,下同) 适用于html中直接引用图片
     npm install  copy-webpack-plugin -D
    cnpm install imagemin-webpack-plugin -D

    #引用图片以及压缩 适用于js中创建img添加图片地址
    npm install url-loader filer-loader -D
    cnpm install image-webpcak-loader -D
    
    

    也可以用cnpm yarn 等安装

  5. 创建 webpack.config,js   (webpack 配置文件)
    webpack.config.js
    const path = require('path')
    const { CleanWebpackPlugin } = require('clean-webpack-plugin')
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
    const TerserJSPlugin = require('terser-webpack-plugin')
    // const CopyPlugin = require('copy-webpack-plugin')
    // const ImageminPlugin = require('imagemin-webpack-plugin').default
    const { extendDefaultPlugins } = require('svgo')
    module.exports = (env) => {
      const mode = env.production ? 'production' : 'development'
      return {
        entry: { home: path.resolve('src/pages/home/index.js') },
        output: {
          path: path.resolve('dist'),
          filename: '[name].[chunkhash].js',
        },
        mode,
        resolve: {
          alias: {
            '@static': path.resolve('static'),
          },
        },
        module: {
          rules: [
            {
              test: /\.less$/i,
              use: [
                // 解析less 并抽离css,开发环境用syle-loader便于热更新
                env.production ? MiniCssExtractPlugin.loader : 'style-loader',
                'css-loader',
                'less-loader',
              ],
            },
            {
              test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
              use: [
                {
                  loader: 'url-loader',
                  options: {
                    limit: 8192,
                  },
                },
                {
                  loader: 'image-webpack-loader',
                },
              ],
            },
          ],
        },
        plugins: [
          // 清空dist(打包文件夹)下所有文件
          new CleanWebpackPlugin(),
          // 创建HTML页面,webpack output主要负责提取压缩的js文件,需要用这个插件生成HTML文件
          new HtmlWebpackPlugin({
            filename: `index.html`, //生成的文件名
            template: `./src/pages/home/index.html`, //文件模板不穿会生成一个默认Body内容为空的HTML文件
            inject: true,
            title: 'webpack5',
            favicon: path.resolve(__dirname, 'static/ico/favicon.ico'),
            chunks: ['home'], // chunks为该页面要包含的js文件
          }),
          // new HtmlWebpackPlugin(),
          new MiniCssExtractPlugin({
            filename: 'css/[name].[contenthash:8].css',
          }),
          // 根据实际情况使用
          // new CopyPlugin({
          //   patterns: [
          //     {
          //       from: 'static',
          //       to: 'static',
          //     },
          //   ],
          // }),
          // 放在CopyPlugin之后可以压缩copy的图片资源
          //  new ImageminPlugin({ test: /\.(jpe?g|png|gif|svg)$/i }),
        ],
        optimization: {
          minimize: true,
          minimizer: [
            new CssMinimizerPlugin({}),
            new TerserJSPlugin({
              terserOptions: {
                format: {
                  comments: false,
                },
                compress: {
                  drop_console: true, // 默认false,设置为true, 则会删除所有console.* 相关的代码。
                },
              },
              extractComments: false,
            }),
          ],
        },
        devServer: {
          // watchFiles: ['src', 'static'],
          hot: true,
          compress: true,
          port: 8000,
          open: true,
        },
      }
    }
  6. 在packge.json 配置执行脚本
    {
    ...
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server",
    "build": "webpack --env production"
    },
    ....
    }
  7. 执行 npm start 命令就会自动打开浏览器访问页面
  8. gitee项目地址 https://gitee.com/jilangyangbo/webpack5.git

 

从0开始基于Webpack5 搭建HTML+Less 前端工程的更多相关文章

  1. H5新人福音~零配置搭建现代化的前端工程

    X-BUILD一套基于Webpack(v4.21.0)快速搭建H5场景开发环境的脚手架,只需要几分钟的时间就可以运行起来.X-BUILD是针对H5开发的一套自动化构建工具,致力于提升开发效率,减小开发 ...

  2. 基于MyEclipse+9.0+++Tomcat+7.0的SSH+平台搭建

    基于MyEclipse+9.0+++Tomcat+7.0的SSH+平台搭建 http://wenku.baidu.com/view/96fbfe0f581b6bd97f19ea1d.html 用MyE ...

  3. 第三篇 基于.net搭建热插拔式web框架(重造Controller)

    由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并且http上下文不支持跨域,所以我们要重造一个contro ...

  4. 第二篇 基于.net搭建热插拔式web框架(沙箱的构建)

    上周五写了一个实现原理篇,在评论中看到有朋友也遇到了我的问题,真的是有种他乡遇知己的感觉,整个系列我一定会坚持写完,并在最后把代码开源到git中.上一篇文章很多人看了以后,都表示不解,觉得不知道我到底 ...

  5. 基于Eclipse搭建Hadoop源码环境

    Hadoop使用ant+ivy组织工程,无法直接导入Eclipse中.本文将介绍如何基于Eclipse搭建Hadoop源码环境. 准备工作 本文使用的操作系统为CentOS.需要的软件版本:hadoo ...

  6. EJB3.0开发环境的搭建

    EJB Container的介绍SUN公司正式推出了EJB的规范之后,在众多的公司和开发者中引起了非常大的反响.标志着用Java开发企业级应用系统将变的非常easy.很多公司都已经推出了或正打算EJB ...

  7. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  8. 基于Hexo搭建博客并部署到Github Pages

    基于Hexo搭建博客并部署到Github Pages 之前在简书上写东西,觉得自己还是太浮躁.本来打算用Flask自己写一个,以为是微框架就比较简单,naive.HTML.CSS.JS等都要学啊,我几 ...

  9. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

随机推荐

  1. jQuery的优缺点,与vue的不同,vue的优缺点?

    jq优点: 比原生js更易书写, 封装了很多api, 有丰富的插件库; 缺点: 每次升级与之前版本不兼容, 只能手动开发, 操作DOM很慢, 不方便, 变量名污染, 作用域混淆等. vue优缺点: 双 ...

  2. pip 安装更新卸载 pip/yum换源

    pip安装:sudo apt-get install python3-pip pip更新:sudo pip3 install --upgrade pip pip卸载:sudo apt-get remo ...

  3. ACL 权限控制机制 ?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

  4. memcached 是怎么工作的?

    Memcached 的神奇来自两阶段哈希(two-stage hash).Memcached 就像一 个巨大的.存储了很多<key,value>对的哈希表.通过 key,可以存储或查询任意 ...

  5. 理解feof与EOF

    feof(feof msdn) feof用于判断文件结尾.头文件<cstdio>.使用方法是feof(fp),fp为指向需要判断的文件的指针.如果不到文件结尾,返回0值:如果是文件结尾,返 ...

  6. 安装Prettier

    安装Prettier Prettier是优化代码格式的工具,可优化JavaScript.TypeScript.JSON等代码及配置文件. 使用命令yarn add -D --exact prettie ...

  7. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  8. js 中的submit 回调函数

    1.submit.php <?php $arr = $_POST; $arr['msg']=1; //echo $_POST['uname']; echo json_encode($arr); ...

  9. JavaScript & 6小时了解ES6基本语法

    一步一步似爪牙. 前言 学习es6之前我们可能并不知道es6相比es5差距在哪, 但是这并不妨碍我们站在巨人的肩膀上; 程序员就是要乐于尝鲜; 学习es6最终目的是结合es5 一起进行工程项目开发, ...

  10. ccf颁奖晚会

    感想: 首先,十分感谢学校给我们参加比赛的机会,给予我们这次难能可贵的学习机会,第一次在这么大型的赛场中展现自己,我们也不免有些紧张.从最开始在线上进行模型训练,到我们不远千里在江苏进行场地的勘察,到 ...