Webpack 基本使用

模块化的由来

JS传值问题

在js当中,如果一个js文件的属性想要被另一个js文件获取到,那么只能通过window.属性将该属性设置为全局变量以后才能够被另一个文件读取,然而这样是件极其不安全的事,因为极有可能发生变量值被覆盖这样的麻烦事。为此在node.js中提出了一切皆模块的观念,即所有的静态文件都被看做是模块,每个模块可以通过module.exports暴露出值,也可以通过require(模块)获取别的模块保留的值,举例:

  • a.js
module.exports = {name:"aaa"};
// 将对象暴露出来
  • b.js
var data = require('./a.js');
// b.js中获取a.js暴露出来的内容
console.log(data);

此时b.js就可以获取a.js中指定的数据了,但是上面的这段代码如果直接在浏览器中是无法执行的,因为require是node里的关键词。此时就需要用到webpack将这段代码编译成浏览器能够执行的代码,执行命令为:webpack 入口文件(这里因为是b.js引用a.js的内容,所以是b.js) [生成的文件名,可选],然后就会生成一个bundle.js(根据配置也可能是别的名字,比如main.js)文件,里面将这两个文件进行了打包和加密,生成了一个新的文件,在html文件中引入这个bundle.js即可成功实现上面的效果

Webpack介绍

通过上面的问题我们可以知道webpack是一个静态资源打包工具,在webpack中一切皆模块,包括js、图片等所有静态文件都是模块,即模块化开发(参考:https://www.cnblogs.com/moxiaowohuwei/p/8692359.html),然后将这些模块根据需要打包成对应的bundle.js

功能

1.打包代码
2.压缩代码
3.版本兼容编译
4.搭建脚手架

安装

安装webpack前需要先配置好node.js环境,然后输入下面命令:

npm install webpack webpack-cli -g

安装完成后输入下面命令查看是否安装成功:

webpack -v
webpack-cli -v

简单使用

通过命令:

webpack 入口文件 [生成的文件名,可选]

即可将文件打包成对应的bundle.js文件。但是这种方式如果是对应多个文件的情况时,一个个文件加在参数后面将十分冗长,可以建议通过文件配置方式打包文件,参考下面项目使用步骤

项目使用步骤

1.创建一个项目文件夹,在文件夹下通过命令:npm init -y生成package.json文件,再输入命令:npm i -D webpack webpack-cli安装webpack和webpack-cli
2.创建一个文件夹名为modules存放所有的模块
3.在modules目录下创建各种js模块文件编写功能函数,并通过exports方法导出模块
4.在modules目录下创建main.js文件作为js文件的入口模块,并通过require方法获取模块,然后调用对应模块下的功能函数
5.创建webpack.config.js配置文件,并在当中配置entry属性(入口模块)和output属性(输出文件路径)等
6.在命令行输入命令:webpack,对文件资源进行打包(如果需要动态编译,则命令后面加上参数:--watch),最终会在对应目录下生成bundle.js文件
7.创建入口html文件并引用打包生成的js文件

webpack.config.js文件属性

  • mode:优化模式,包括development(开发模式,会输出调试信息)、production(生产模式,最高级别优化,包括压缩、忽略错误,默认模式)、none(不优化)
  • entry:入口模块,单个模块则直接传入文件名字符串,多个的话可以传入对象
  • output:输出文件,其下包括两个属性:path(路径,要求必须为绝对路径)和filename(文件名)

举例:

module.exports = {
    entry: {
        main: './b.js',
        other: './c.js'
    },
    output: {
        filename: '[name].bundle.js',
        // [name]为entry对象里的属性名
        path: __dirname + '/dist'
        // __dirname为当前路径
    }
}

加载CSS文件

步骤

1.安装style-loader和css-loader模块:npm i -D style-loader css-loader
2.在webpack.config.js文件导出的属性当中添加如下的模块处理规则:

modules: {
    rules: [
    {
        test: /\.css$/,
        // 匹配所有CSS文件
        use: ['style-loader', 'css-loader']
        // 顺序是反过来,即先用css-loader处理,再用style-loader处理
    }
    ]
}

3.在需要使用CSS文件的地方通过import 'xxx.css'导入即可

加载SASS文件

步骤

1.安装:npm i -D sass-loader node-sass
2.加上对应的rule配置
3.在需要使用SASS文件的地方通过import 'xxx.sass'导入即可

加载图片文件

步骤

1.安装:npm i -D file-loader
2.加上对应的rule配置如下:

modules: {
    rules: [
    {
        test: /\.(jpg|jpeg|png|gif|svg)$/,
        // 匹配所有图片文件
        use: ['file-loader']
    }
    ]
}

3.在需要使用图片文件的地方通过url('xxx.xxx')导入即可

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 提供一个作者自己基于 webpack 搞好的一个下载包,可以看看https://github.com/chiche...
    IT小池阅读 1,122评论 0赞 1
  • MVVM Vue的指令 基本概念: Vue中指令都是以v-xx开头,指令的作用,最终都是拿着数据,渲染我们指令标签...
    getElementsByMK阅读 1,982评论 0赞 2
  • step1:创建一个项目录注意:项目名一般不要带中文step2: 创建package.json 或者: step4...
    秋日传奇1990阅读 6,594评论 0赞 1
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,744评论 1赞 32
  • 定义: 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器。当webpack 处理...
    牧鸥阅读 1,560评论 0赞 4

友情链接更多精彩内容