webpack 4.0搭建环境及配置

webpack的配置

全局安装webpack webpack-cli webpack-dev-server

sudo npm i webpack webpack-cli webpack-dev-server -g

webpack 模块打包器 会根据entry入口文件来构建模块依赖图,最后在output文件中输出
webpack-dev-server 服务器插件,相当于webpack+apache启动一个web服务以后实时修改
安装完成以后构建一个webpack项目

//在你的系统文件夹下面创建一个新的文件夹并进入新建的目录创建相关子目录
mkdir webpack-course
cd webpack-course 
mkdir src dist config
//git初始化整个目录
git init .
//生成package.json文件
npm init -y
//在子目录下面创建子文件
touch src/index.js dist/index.html
//查看子目录是否成功创建了文件
ls src
ls dist

在webpack4之前我们要对文件进行打包的时候webpack会先找到一个叫webpack.dev.js的文件,然后按照该文件的内容来进行项目打包,但是4以后,在以上文件创建好以后我们就可以直接运行webpack来对文件进行打包,只要我们的src/index.js和dist/index.html这两个文件对应存在,webpack就会找到src/index.js文件将它作为默认的入口来进行打包,运行webpack的命令如下:

//mode 是4里面独有的,它有两种环境,一个是开发环境(development)开发环境下运行会在dist下面生成一个main.js文件dist/main.js,一个是生产环境(production)生产环境运行以后会生产一个node_modules的文件;我们可以看见在控制台生成的文件大小的对比,我们会发现生产环境的打包体积很小,它只会打包我们用得到的东西
webpack  --mode=development
webpack  --mode=production
development

production
大小对比

之前说到4以前的版本会用到一个webpack.dev.js的文件,在4以后也还是要用它,因为要加载css图片等文件我们要依赖相关的loader 所以我们要创建一下这个文件

touch config/webpack.dev.js

删除之前的打包的文件,在webpack.dev.js里面重新构建我们项目的打包依赖图

rm dist/main.js src/index.js

现在项目结构如下:


项目结构

在webpack.dev.js 里面来写我们的配置,如下


const path = require("path");

module.exports = {
    //入口文件 
    entry:{
        //文件名 : "文件路径"
        main : "./src/main.js"
        //如果有多个入口文件就需要采用[]将文件路径存起来
        //main : [ "./src/main.js" , "./src/app.js"]
    },
    //打包环境 development 和 production 这里必须要配置不然会报错
    mode:"development",
    // 有且只有一个
    output:{
        //出口文件名 这里可以直接写死
        filename : "bundle.js",
        //出口文件名 这里也可以不写死 采用[name]来指定名字 这里会生成`对应入口文件名加上-bundle.js` 即 `main-bundle.js` 
        // filename : "[name]-bundle.js"
        //path 采用nodejs的path模块
        path : path.resolve(__dirname , "../dist")
    }
}

配置完成以后,我们可以运行webpack4的命令,来打包我们的文件

//webpack执行config/webpack.dev.js文件的配置
webpack --config=config/webpack.dev.js
执行成功

在dist目录下生成一个bundle.js 的文件,改文件就是webpack里面的东西


bundle.js文件

以上就是我们webpack的打包的实现方式,那么我们怎么实现webpack的热更新呢,这时候我们就需要用到webpack-dev-server

webpack热更新

首先在项目下安装本地依赖

npm i webpack webpack-dev-server webpack-cli

然后分别在对应的文件里面做如下修改

//src/main.js
alert('hello word !!!')
//dist/index.html
<body>
    <h1>hello word</h1>
</body>
//webpack.dev.js里面加入publicPath
output:{
        //出口文件名 这里可以直接写死
        filename : "bundle.js",
        //出口文件名 这里也可以不写死 采用[name]来指定名字 这里会生成`对应入口文件名加上-bundle.js` 即 `main-bundle.js` 
        // filename : "[name]-bundle.js"
        //path 采用nodejs的path模块
        path : path.resolve(__dirname , "../dist"),
        //表示公共路径是根路径
        publicPath : '/'
    }

在webpack.dev.js里面做如上配置以后我们可以直接在dist/index.js里面直接引入文件,如下

<body>
    <h1>hello word</h1>
    <script src="/bundle.js"></script>
    <!-- 如果在publicPath里面配置的是"/ccc" 按下面方式引入 -->
    <!-- <script src="/ccc/bundle.js"></script> -->
</body>
image.png

然后采用webpack-dev-server来启动项目,实时更新

webpack-dev-server --config=config/webpack.dev.js

然后打开浏览器localhost:8080以后


localhost:8080

事实上并没有直接打开dist/index.html那么我们需要配置一下本地服务器的contentbase,进入webpack.dev.js进行如下配置

//本地服务器配置
    devServer:{
        //默认进入dist文件夹下面运行index.html
        contentBase : "dist"
    }

重新启动


好了

然后我们就可以修改文件以后 可以看见实时更新的内容了
最后附上webpack.dev.js的内容


const path = require("path");

module.exports = {
    //入口文件 
    entry:{
        //文件名 : "文件路径"
        main : "./src/main.js"
        //如果有多个入口文件就需要采用[]将文件路径存起来
        //main : [ "./src/main.js" , "./src/app.js"]
    },
    //打包环境 development 和 production
    mode:"development",
    // 有且只有一个
    output:{
        //出口文件名 这里可以直接写死
        filename : "bundle.js",
        //出口文件名 这里也可以不写死 采用[name]来指定名字 这里会生成`对应入口文件名加上-bundle.js` 即 `main-bundle.js` 
        // filename : "[name]-bundle.js"
        //path 采用nodejs的path模块
        path : path.resolve(__dirname , "../dist"),
        //表示公共路径是根路径
        publicPath : '/'
    },
    //本地服务器配置
    devServer:{
        //默认进入dist文件夹下面运行index.html
        contentBase : "dist"
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容