热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端工程化webpack4.x的基本配置打包基本资源、ES6转换、热更新

前端工程化--webpack4.x的基本配置--打包基本资源、ES6转换、热更新,Go语言社区,Golang程序员人脉社

Webpack是web前端当前最流行的造化构建工具.可以将前端的各种资源自动打包构建,详细说明可见官网https://doc.webpack-china.org/

此篇文章针对前端工程化过程中,所需的webpack配置做一些基本的介绍,并给出自己的一套配置,可自动化打包html、css、sass、js(支持ES6)、images,并实现热更新


一.基本安装

1.      安装node.js

        官网下载地址:https://nodejs.org/en/。下载完成后傻瓜式安装。

2.      项目根目录新建package.json文件,将附2的内容复制进去.(假设你的程序放在D:/project里,那么项目根目录就是D:/project)

3.      项目根目录下若无webpack.config.js文件,新建一个空的同名文件,放在根目录中。将附1的内容复制进去

4.      项目根目录下新建.babelrc,将附3的内容复制进去.

5.      进入命令行,windows下同时按下windows+R,输入cmd,回车

        进入项目目录(下面说的本地,即是进入到项目目录),比如进入D:/project下,

        命令行输入 D: 回车

        命令行输入cd project 回车

6.      命令行全局安装webpack:命令行输入,回车

        npm i webpack -g

7.      本地安装node-sass,这个包无法实现npm安装,安装方式如下:

    (1)去node-sass的github主页下载:https://github.com/sass/node-sass/releases

    选择自己的操作系统的node后缀的版本,比如说,是windows32位操作系统,就下载

    win32-ia32-57.node,将文件放至项目根目录

    (2)命令行执行

    npm i node-sass--save-dev --sass_binary_path=./win32-ia32-57.node,

    这次安装完成后,以后就可以npm  i -–save-dev node-sass方式安装了

8.当前目录,命令行执行 npm i


二. 如何运行,实时更新

    命令行进入当前目录,执行 npm start,等命令执行结束,根据提示在浏览器中打开相应地址.即可在浏览器中看到相应的页面,此时在代码中更改html或css或js,保存后,可直接在浏览器中看到结果

三. 如何打包,线上发布

   命令行进入当前目录,执行npm runbuild ,即在当前目录下生成dist目录.里面的文件即可发布  

四.注意事项:

1.入口js为src/js/index.js

2.在原始的html文件中删除和标签

3.如何引入css文件?

   在 src/js/index.js里引入

    例:

    import ‘../css/ normalize.css’

     import ‘../css/default.css’

    引入顺序影响最终css在html中引入的顺序

4.如何在入口js中引入其它js文件?

    这里推荐ES6的import 和export详情可以查阅:

    http://es6.ruanyifeng.com/#docs/module


五.最终实现的效果:


    原始目录为 src,下面包括了大量的css和js文件

    打包后为dist目录,下面包含了打包后的一个css,和一个js文件


附1:webpack.config.js内容:

const path =require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const extractCSS = new ExtractTextPlugin('css/[name]-css.css');
const extractSASS = new ExtractTextPlugin('css/[name]-sass.css');
//构建前删除dist目录
const CleanWebpackPlugin = require('clean-webpack-plugin');


module.exports={
    entry:'./src/js/index.js',//入口JS
    output:{
        filename:'bundle.js',
        path:path.resolve(__dirname,'./dist')
    },
    module:{
        rules:[
            {
                test:/.css$/,
                use: extractCSS.extract({                     
                      use: "css-loader",
                      fallback: "style-loader"
                })


            },
            {
                test:/.scss$/,
                use: extractSASS.extract({
                    use: [
                        {loader: "css-loader"}, 
                        {loader: "sass-loader"}
                    ],
                    fallback: "style-loader"
                })
            },
            {
                test: /.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options:{
                        cacheDirectory:true//缓存
                    }
                }
            },
            { //打包css里的图片
               test: /.(png|jpg|gif|jpeg)$/,
               use: [
                 {
                   loader: 'url-loader',
                   options: {
                     limit: 8192,  //小于8KB,就base64编码
                     name:'img/[name].[ext]',     //在哪里生成
                     publicPath:'../'    //在生成的文件引用,前面加
                   }
                 }
               ]
             }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin(
        {          
            template: './src/index.html',// 模板文件          
            filename: 'index.html'
        }
        ),
        new CopyWebpackPlugin([
            {from:'./src/img',to:'./img'}
        ]),
        extractCSS,
        extractSASS,
        new CleanWebpackPlugin(['dist','build'],{
            verbose:false,
            exclude:['img']//不删除img静态资源
        })
    ]


}

附2: package.json内容

{
 "name": "webpack-test",
 "version": "1.0.0",
 "description": "null",
 "keywords": [],
 "author": "py",
 "scripts": {
  "dev": "webpack-dev-server --mode development",
  "start": "npm run dev",
  "build": "webpack --mode production"
 },
 "devDependencies": {
  "babel-core": "^6.26.0",
  "babel-loader": "^7.1.2",
  "babel-preset-env": "^1.6.1",
  "clean-webpack-plugin": "^0.1.17",
  "copy-webpack-plugin": "^4.5.1",
  "css-loader": "^0.28.8",
  "extract-text-webpack-plugin": "^4.0.0-beta.0",
  "file-loader": "^1.1.11",
  "html-webpack-plugin": "^3.0.6",
  "node-sass": "^4.8.3",
  "sass-loader": "^6.0.6",
  "style-loader": "^0.20.3",
  "url-loader": "^1.0.1",
  "webpack": "^4.2.0",
  "webpack-cli": "^2.0.12",
  "webpack-dev-server": "^3.1.1"
 },
 "dependencies": {}
}

附3:

{
  "presets": [
    ["env", {
      "targets": {
        "browsers": ["last 2 versions", "not ie <= 8"]
      }
    }]
  ]
}


 --ByPY


推荐阅读
  • socket.io是个基于node.js的快平台实时通讯框架。只用不到10行代码,就可以搭建一个简单的多人实时聊天室。先来看看运行后的效果:socket.io多人聊天室只要简单几 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • 开发笔记:(源码开放) React + webpack3 多页面应用 及 常见问题解答
    本文由编程笔记#小编为大家整理,主要介绍了(源码开放)React+webpack3多页面应用及常见问题解答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • Linux     系统安装
    Linux系统安装linux系统安装准备工作电脑、u盘、光盘、网络、硬盘主要使用光盘、网络虚拟化软件vmwarevi ... [详细]
  • nvmw安装,用于控制node版本;
    之前一直使用的是nodev2.2.0版本,挺说新版本的node解决了npm安装插件产生文件夹结构过深的问题,所以就想更新试试;上网一看才发现,尼玛的node已经到了6.+版本了,好 ... [详细]
  • packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOE ... [详细]
  • 【实践】基于RTThread的智慧路灯案例实验分享
    之前分享了基于LiteOS的智慧农业案例实验分享基于LiteOS的智慧农业案例实验分享,阅读量挺不错,看样子大家都挺喜欢这种实验。那咱们就再来一个类似的实验:基于RT-Thread ... [详细]
  • PICT初探索
    pict用于测试用例的生成,非常高效。也非常方便。安装完成后主要程序就一个exe文件。需要通过cmd命令行进入pict文件夹。建立测试用例文件然后使用简单的命令行生成测试用例也可以 ... [详细]
  • 2019独角兽企业重金招聘Python工程师标准1、确认工程是否安装eslint-plugin-vue如图所示,确认工程里的package.json里是否有es ... [详细]
  • 如何运行vue项目(github项目),Go语言社区,Golang程序员人脉社 ... [详细]
  • ASP.NETCoreZero笔记(PowerTools)
    安装ASP.NETCoreZeroPowerTool根据官方的介绍,使用该工具,可以快速得创建具备单个表结构及父子表结构的服务以及前端页面。服务:指的是生产对应基础功能webApi ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
author-avatar
鉴佳熙萍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有