Webpack入门初体验

基础文件配置

在安装webpack之前你需要先安装Node.js

  • node -v可以查看当前安装的node版本
  • 要想使用webpack指令,先用npm install webpack webpack-cli --save-dev指令进行全局安装
  • 当前项目安装webpack npm install webpack webpack-cli --save-dev(yarn add webpack webpack-cli -D),webpack从4开始,webpack本身和cli就分离开了
  • webpack的三种使用方式:
    1.npx webpack
    2.node_modules/.bin/webpack
    3.在package.json的scripts添加"build":"node_modules/.bin/webpack",然后执行npm run build命令

1.创建一个目录,并且切换到目录下面
mkdir webpack-demo && cd webpack-demo
2.npm初始化并本地安装webpack
下面这个指令会在本地生成一个package.json的文件
npm init -y
然后执行npm install webpack --save-dev安装webpack开发依赖。
3.在webpack-demo目录下创建对应的目录和文件
src目录用来存放源文件mkdir src && cd src
创建一个个入口文件index.jstouch index.js
创建3个模块touch moudel1.js module2.js module3.js
4.index.js文件内容

import module_1 from './module1'
import module_2 from './module2'
import module_3 from './module3'
module_1()
module_2()
module_3()

5.module1.js文件内容


export default function module_1() {
console.log("这是module_1模块")
}

6.module2.js文件内容

export default function module_2() {
console.log("这是module_2模块")
}

7.module3.js文件内容

export default function module_3() {
console.log("这是module_3模块")
}

8.现在,需要返回到项目的根目录,也就是webpack-demo目录下,新建一个配置文件
touch webpack.config.js
9.在webpack.config.js中写配置内容
在项目的根目录下创建一个dist文件,作为配置的输出路径,app.js是webpack打包运行后自动生成的

const path = require('path')
// 导入处理路径的模块
module.exports = {
    // 导出一个配置对象,将来webpack在启动的时候,会默认来查找webpack.config.js,并读取这个文件中导出的配置对象,来进行打包处理
    entry: './src/index.js',    // 项目入口文件
    output: {   // 配置输出选项
        path: path.resolve(__dirname, 'dist'),  // 配置输出的路径,当前的位置为__dirname,拼接上dist,形成一个绝对路径,然后再拼上下面的filename,形成项目的输出文件
        filename: 'my-first-webpack-bundle.js'   //配置输出的文件名
    }
}

10.找到根目录下package.json文件,在script后的对象中,添加内容

"dev": "./node_modules/.bin/webpack"

11.npm run dev

mode设置

当我们在项目中最初使用npm run build的时候,命令行工具中会警告我们没有设置mode,所以会自动使用production模式,所以我们可以在webpack的配置文件webpack.config.js中设置modemode:'production'或者是development,正常情况下,development打包出来的文件会大很多。
mode的使用场景:
比如我们在某个js文件中设置以下代码

if (process.env.NODE_ENV  === 'development') {
    console.log('base is localhost')
}else{
    console.log('base is imoccom')
}

根据webpack的配置文件中mode的设置,会打包出来上面的js语句中对应的代码

使用html-webpack-plugin插件配置启动页面

这个插件就是帮我们自动生成html文件并且自动引入打包好的js文件

  1. 运行npm i html-webpack-plugin --save安装到开发依赖
  2. 修改webpack.config.js配置文件如下:
    // 导入处理路径的模块
    var path = require('path');
    // 导入自动生成HTMl文件的插件
    var htmlWebpackPlugin = require('html-webpack-plugin');
    module.exports = {
        entry: './src/index.js',
        output: { 
            path: path.resolve(__dirname, 'dist'),
            filename: 'my-first-webpack.bundle.js' 
        },
        plugins:[ // 添加plugins节点配置插件
            new htmlWebpackPlugin({
                //在这个插件内部,可以指定模版和自定义生成的文件名
                template:'src/index.html',
                //加了template选项,就会在这个模板的基础上把打包好的js文件加入到这里面中
                filename:'main.html'//自动生成的HTML文件的名称
            })
        ]
    }

有了上面两个配置后,这个插件帮助生成一个main.html,并且是基于template:'src/index.html'生成的

配置webapck支持babel

yarn add babel-loader @babel/core @babel/preset-env @babel/plgun-transform-runtime -D
yarn add @babel/runtime -S

@babel/runtime的安装只是为了支持本地开发的运行环境,所以使用-S进行安装就可以了。
接下来是修改配置文件.babelrc

{
    "presets": [
        "@babel/preset-env"
    ],
    "plugins": [
        "@babel/plugin-transform-runtime"
    ]
}

接下来去webpack.config.js文件的module的rules中添加规则

module:{
    rules:[
        {
            test: '/\.js$/',
            loader: 'babel-loader'
        }   
    ]
}

这样的话,再次打包运行,会发现刚才安装的babel应用成功了
接下来掩饰安装一个插件,用来复制静态文件进制定的位置
yarn add clean-webpack-plugin copy-webpack-plugin -D
在webpack.config.js文件中添加如下代码:

const { CleanWebpackPlugin }  = require('clean-webpack-plugin')
const { CopyWebpackPlugin }  = require('copy-webpack-plugin')

在plugins中去new一下

new CleanWebpackPlugin()
new CopyWebpackPlugin([{
    from:'path.join(__dirname,'assets')',
    to:'assets'
}])

然后npm run build就可以自动当前项目的assets文件夹直接放到dist中去了

使用webpack-dev-server插件实现实时打包构建

webpack自带了webpack --watch指令,如果
webpack-dev-server插件提供了一个简单的 web 服务器,并且能够实时重新加载(live reloading)。
1.安装webpack-dev-server

npm install webpack-dev-server --save-dev

增加package.json配置文件如下:

"start": "webpack-dev-server",

在终端运行命令:

npm start

这个命令是利用了webpack-dev-server将项目打包到内存中,而npm run dev是将项目打包到dist文件夹中,项目上线时直接把dist中的文件部署到服务器中就可以,打包到内存中的好处是可以实现实时更新。
命令启动后,就可通过浏览器的对应接口对项目进行预览。
2.让webpack自动给我们打开服务器地址
在webpack.config.js中添加配置

devServer:{
    open: true
}

其中open:true 表示自动打开浏览器
3.修改服务器端口
在webpack.config.js中添加配置项目

devServer:{
    open: true,
    port: 8090
}

其中port后面给了个自定义端口
4.设置默认访问目录,如果不设置访问目录,则系统会默认访问项目根目录

devServer:{
    open: true,
    port: 8090,
    contentBase: './dist'
}

零配置使用webpack4.x

1.安装webpack
webpack的安装方式可以分为全局安装和局部安装,全局安装需要加 -g

 npm install webpack -g

不过这种方式并不推荐,我们需要直接安装在项目本地, 注意:webpack4.x版本安装需要安装webpack-cli
进入到自己的项目目录,我这里项目目录为webpack-demo, 进入到目录,执行命令,npm init 初始化项目
webpack-cli@3.1.2

npm install webpack  webpack-cli -D

2.简单打包实例
在项目目录下新建src目录,在src目录下分别建立index.js 和 module_a.js文件
index.js里的内容

let a = require("./module_a")
console.log(a)

module_a.js里的内容

module.exports = "hello world!!!"

3.运行打包

npx webpack
//可以添加上生产模式
npx webpack --mode development

npx是npm里内置的一个包执行器,需要npm 版本5.2.0以上支持,因此,请查看版本号是否支持
用npx都不用在webpack.config.js添加dev配置了
webpack4中mode分三种:“-- production(生产环境)”,"--development(开发环境)","--none(不使用前两个默认的配置)",上面的每一种模式都对应着一种配置。
在实际开发过程中可以设置mode来在我们自定义配置的基础上 加上 mode提供给我们的配置。
打包后在dist目录下会生成一个main.js的文件

使用webpack自定义配置

在项目目录下新建 webpack.config.js, webpack是基于node的 遵循commonjs规范,在配置文件中需要使用module.exports导出内容,配置文件主要包括以下几个模块

module.exports = {
    //入口配置
    entry: '',
    //出口配置
    output: '',
    //模块配置
    module: {},
    //插件配置
    plugins: {},
    //模式配置,开发模式还是生产模式
    mode:'',
    //开发服务器配置
    devServer: {},
    //解析配置
    resolve: {}
}

简单配置:

const path = require("path")
module.exports = {
    entry: "./src/index.js",
    output: {
        path: path.resolve(__dirname, "dist"),
        filename: "bundle.js"
    },
    module: {
        rules: [
            {
                test: /\.css/,
                use: ["style-loader", "css-loader"]
            },
            {
                test: /\.(jpg|png|gif|bmp)/,
                use: [
                    loader: "url-loader",
                    options: {
                        limit: 10240
                    }
                ]
            }
        ]
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容