webpack4 搭载一个基础的具有完整功能的项目(支持热更新,动态加载)

之前我说了一个入门的webpack4 现在我尝试着搭建一个稍微完整点webpack项目 

开始之前还是显示环境的搭建 想让项目支持热更新(本地修改代码浏览器上会实时更新)

1.建立一个空的文件夹     

2.先初始化项目   npm init    一路回车到底    0.0

3.安装相关的依赖

npm i -D

webpack      //webpack的核心功能包

webpack-cli   // webpack 的一些命令行 可以在 package.json中配置启动项

webpack-dev-server   // 热更新需要  同时也依赖 webpack-cli

style-loader    //将css-loader 解析后的结果 渲染在浏览器上

css-loader      // 提取css文件 

url-loader      //提取其他的文件  如:图片,字体等等

file-loader   // 功能和上面的一样  配合使用

babel-loader   // 兼容js代码  将es6=>es5 等等 在低版本 ie浏览器上兼容设置

4.新建相关的文件

4.1   index.html   

4.2    新建一个src文件夹 

                main.js

                main.css

               img 文件夹   =>存放图片  我放了一个   bg.jpg的图片文件

4.3     新建立一个 config的文件夹  下面有俩个文件

           webpack.production.js   // 用于生产环境的 webpack配置

           webpack.development.js    //用于开发环境下的webpack配置

4.4 最主要的还有

         webpack.config.js  核心配置文件

5.代码书写

5.1 package,json

     "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",           
    "start": "webpack-dev-server --open --env.development",            // --open  支持运行 就会启动浏览器 不用手动 在地址栏输入地址    --env.development   会给webpack.config.js传递一个参数 告诉是 启动 开发环境下的webpack配置
    "build": "webpack --env.production"
  }

5.2 webpack.config.js中的代码

我是用一个导出一个函数    里面根据 env的设置 动态选择行 加载那个webpack配置
module.exports=function(env,argv){
    // env是环境配置
    env=env||{development:true}
    return {
        entry:"./src/main.js",
        module:{
            rules:[
                {
                    test:/\.css$/i,
                    use:['style-loader','css-loader']
                },
                {
                    test:/\.(jpg|png|gif)/i,
                    use:{
                        loader:'url-loader',
                        options:{
                            outputPath:'imgs/',
                             // publicPath:'dest/imgs',  //在 dev-server中图片路径 不需要对外路径 因为这个时候图片存储在内存中

                               // 静态加载需要 动态加载就不需要了  这句话可以去掉
                            limit:4*1024
                        }
                    }
                }
            ]
        },
        ...env.production?require('./config/webpack.production.js'):require('./config/webpack.development.js')   //核心代码 动态性加载   env.production  的值 为true和false  动态加载哪一个环境下的配置
    }
}

5.3   src /main.js

import "./main.css"    //引入了一个 css文件
alert('hello webpack!');   //弹出一句话

5.4 src/main.css

body{
    background: url(img/bg.jpg);    // 加载了一个背景图片
}

5.5  index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Hello Webpack</title>
    </head>
    <body>
        <div class="container">
            
        </div>
    </body>
</html>

5.6 config 文件夹

5.6.1 webpack.production.js

const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');   // 安装生成html文件的插件
module.exports={
    mode:"production",
    output:{
        filename:"bundle.min.js",    // 生成生产环境下的 js文件
        path:path.resolve(__dirname,'../dest/')
    },
    // html-webpack-plugin 帮你生成一个html文件的插件
    plugins:[
        new HtmlWebpackPlugin({
            template:path.resolve(__dirname,'../index.html')   // 选择模板文件 就是你创建的index.html文件 自动帮你引入生成的 bundle.js文件 不用手动引入
        })
    ]
}

5.6.2 webpack.development.js

const HtmlWebpackPlugin=require('html-webpack-plugin');
const path=require('path');
module.exports={
    mode:"development",
    output:{
        filename:"bundle.js",    //生成开发环境下的js
    },
    // html-webpack-plugin 帮你生成一个html文件的插件
    plugins:[
        new HtmlWebpackPlugin({
            template:path.resolve(__dirname,'../index.html')
        })
    ]
}

6.最后就是测试了  

我们在命令行 运行  npm run start  他就会执行 开发环境下的webpack配置 同时也支持热更新

npm  run build  就会执行开发环境下的 webpack 会在当前目录生成一个 dest文件夹  

下面 包括 一个 bundle.min.js   一个 imgs文件夹 里面有一个图片文件  一个index.html文件  

在实际的生产环境  我们可以直接把这个dest文件拿过来 放到我们的服务器上就可以

为了 我特意 放到了  我的 php的apache服务器上测试 是可以的

7.总结 

我在配置的时候碰见写个文件就是文件路径的问题 能用绝对路径还是绝对路径

使用path模块 resolve方法  因为配置里面的文件路径可能需要变来变去 我们使用相对路径的时候 还是算来算去的 

最后 祝愿大家都能配置成功       

武汉 加油  中国加油  希望这次疫情早点过去   生病的人早点康复 武汉也早点好起来

发布了116 篇原创文章 · 获赞 64 · 访问量 7480

猜你喜欢

转载自blog.csdn.net/yunchong_zhao/article/details/104109663