webpack4安装与学习

在慕课上学习了webpack的课程,做了一些笔记,算分享也算记录吧。教程里的是webpack1和现在的webpack4有很多区别,自己也走了不少的坑,最好使用的时候去看官方文档。

https://webpack.js.org/

在填坑的时候也借鉴了很多人写的文章。所以有很多部分是融合了超级多前人的经验总结,然后自己结合实际进行操作的做笔记。部分地方可能有重复,看得懂就好了。

1.全局安装webpack       npm install -g webpack

2.创建项目文件,初始化项目文件目录  npm init

到项目文件下安装webpack   npm install webpack

3.安装全局的webpack-cli     npm install -g webpack-cli  //获取当前webpack版本号配置文件

4.配置mode

默认有production和development两种模式可以设置

命令行设置   webpack --mode development

5.新建入口  在项目文件目录下新建src文件夹,新建index.js文件入口

6.文件打包   命令行输入 webpack --mode development 或 webpack --mode production

webpack将会默认打包,将./src/index.js文件打包成./dist/main.js文件(自动生成dist文件夹和main.js文件)

7.建立html文件,在项目目录下建立html文件,可以直接引用dist/main.js文件。

注意,我们的 script 引用的文件是 dist/main.js,而不是 index.js。这正是前端开发领域的一个趋势:开发的源文件(例子中的 index.js)与最终部署的文件(例子中的 dist/main.js)是区分开的,之所以这样,是因为开发环境与用户的使用环境并不一致。比如我们可以在开发环境使用 ES2017 甚至 ES2018 的特性,而用户的浏览器不见得支持 - 这也是 webpack 等打包工具的一个意义,它们能够辅助我们构建出在目标用户浏览器上正常运行的代码。

8.其他参数配置

我们如果需要配置webpack指令的其他参数,只需要在webpack –mode production/development后加上其他参数即可,如:

webpack --mode development --watch --progress --display-modules --colors --display-reasons

实时刷新

9.监控文件

watch选项最为直观,但在默认情况下,watch选项是关闭状态。

启用watch选项    webpack --mode development --watch

10.刷新浏览器(看官方文档容易填坑,奈何英语emmmm)

https://github.com/webpack/webpack-dev-server

https://webpack.js.org/configuration/dev-server/#devserver

webpack-dev-server,一个基于expressjs的开发服务器,提供实时刷新浏览器页面的功能。

安装webpack-dev-server

首先在项目下安装 webpack-dev-server: npm install -g webpack-dev-server

然后在命令行下执行webpack-dev-server --mode development --output-public-path dist

webpack-dev-server是一个轻量级的服务器,修改文件源码后,自动刷新页面将修改同步到页面上安装webpack-dev-server:①全局安装:npm install webpack-dev-server -g

②在项目中安装并将依赖写在package.json文件中:npm install webpack-dev-server --save-dev

③使用命令webpack-dev-server --mode development --output-public-path src完成自动刷新,指定publicPath,这部分很容易没有实时刷新。

④默认的端口号是8080,如果需要8080端口被占用,就需要改端口,webpack-dev-server --port 3000(将端口号改为3000),可以直接在webpack.config.js配置文件中配置devServer属性,开启热更新和port。

⑤启动服务,输入localhost:端口号,就显示发布的所有根目录,如果项目根目录中没有index.html文件,就会在浏览器中列出项目根目录中的所有的文件夹。

⑥当使用webpack-dev-server --mode development --output-public-path src命令时,在每次修改文件,是将文件打包保存在内存中并没有写在磁盘里,这种打包得到的文件和项目根目录中的index.html位于同一级。使用webpack命令将打包后的文件保存在磁盘中例如在index.html文件中引入通过webpack-dev-server --mode development  --output-public-path src打包的build.js

<script src="build.js"></script>  在index.html文件中引入通过webpack命令打包的build.js 

<script src="./build/build.js"></script>

--inline 内联模式,在开发服务器的两种不同模式之间切换。默认情况下, 应用程序将被启用内嵌模式。这意味着将在包中插入一个脚本来处理实时重装, 并且生成消息将出现在浏览器控制台中。

--hot 启用热模块更换功能

//////以上是搜索了各个教程里面说的,但是实际操作还是有问题,

index.html入口文件是在根目录下,没有进行配置content-base,因为配置了之后会只打包配置的目录文件,默认是根文件。配置了output的publicPath(很重要,删掉之后就不能自动刷新了,应该是webpack-dev-server将每次打包的文件根据output设置生成在publicPath目录下,而文件本身依旧是手动打包的,无法查看到自动刷新打包的文件),只配置了端口,没有配置hot:true和inline:true(最开始配置了,但是有报错,所以删掉莫名OK了)

⑦webpack自带的watch命令与webpack-dev-server的区别

--watch是文件修改后自动打包,webpack-dev-server是修改后发布到服务器上

⑧webpack-dev-server --mode development --content-base src --inline --hot//显示只针对src路径下的文件刷新,文件修改之后浏览器自动刷新,如果要打开的文件和打包的文件不在一个文件夹内,最好不要设定文件夹

11.打包css文件

在项目目录下安装处理css文件的loader

命令行输入:npm install css-loader style-loader --save-dev

css-loader //处理css文件
style-loader //将css-loader处理后的文件作为样式标签<style>插入到html文件中

在处理css文件的时候要指定loader,如在index.js文件里输入require(‘style-loader!css-loader!./style.css‘)

或者直接在命令行输入webpack --mode development --module-bind "css=style-loader!css-loader"

12--progress(查看进度)

13--display-modules(显示隐藏的模块)

14 --display-reasons(显示打包原因)

15.配置,webpack需要传入配置对象,因此进行新建配置文件webpack.config.js,或者使用node.js内置的path模块进行配置,并在它前面加上 __dirname这个全局变量。可以防止不同操作系统之间的文件路径问题,并且可以使相对路径按照预期工作。

①先写moudule.exports={};进行配置;

②入口文件配置,entry="入口文件路径,如./src/js/main.js";

③输出文件配置,output={path:__dirname+"输出文件路径,如/dist/js/bundle.js"};//要创建dist文件夹

__dirname为运行时的当前路径;

另一种方式,先定义const path = require("path");//引入nodejs的path模块

然后在输出文件路径path:path.resolve(__dirname,"./dist/js/bundle.js");

//path.resolve()方法解析了当前路径,将相对路径改为绝对路径。

④重新指定配置文件名

webpack --config 文件名

如webpack --config webpack.dev.config.js

16.定义执行脚本,可以在package.json中设置

在script中设置,如设置"webpack":"webpack --mode development --config webpack.config.js --progress --display-modules --colors --display-reason",//--colors(彩色显示)

直接执行上面的脚本npm run webpack

17.entry配置(chunk),

①字符串表示,单输入,所有依赖都要在入口文件中指定,如entry:"./src/js/main.js",

②数组表示,多输入,两个需要打包到一起的文件可以在配置文件的entry中用数组表示,如entry:["./app/entry1", "./app/entry2"],//这两个文件将会打包到一起

③对象表示(哈希),多页面入口,entry:{page1:"./page1",page2:["./src/a.js","./src/b.js"]},

这三种方式都会把文件打包到输出文件中。

18.output配置,

①单个入口起点,就设置一个出口,如output:{filename:‘bundle.js‘,path:‘/dist/js‘}

②多个入口起点,可以设置name或者hash,如output:{filename:‘[name].js‘,path:__dirname+‘/dist/js‘}

或output:{filename:‘[name]-[hash].js‘,path:__dirname+‘/dist/js‘}

或output:{filename:‘[name]-[chunkhash].js‘,path:__dirname+‘/dist/js‘}

hash值可以认为是版本号或者MD5值保证每个文件的唯一性,每一次修改之后生成文件的hash值不一样,文件名不一样。

③publicPath可以理解为占位符。当需要上线的时候可以将服务器地址设置到这个参数中,output:{path:‘xxx‘,filename:‘xxx‘,publicPath:‘http://cdn.com/‘}

插件(plugin)

插件是 webpack 的支柱功能。webpack 自身也是构建在 webpack 配置中用到的相同的插件系统之上。插件目的在于解决 loader 无法实现的其他事。

19.插件html-webpack-plugin

要引用之前先安装,在项目文件目录下安装 npm install html-webpack-plugin --save-dev

安装好之后,在webpack.config.js配置文件中对插件的引用

var htmlWebpackPlugin = require(‘html-webpack-plugin‘);//commonJS写法

在module.exports中添加plugin部分进行插件初始化,

插件列表,当多个bundle需要共享一些相同的插件时,CommonChunkPlugin可以将这些依赖项提取到一个共享包中,以免重复。

plugins:[

new webpack.optimize.CommonsChunkPlugin({

.....

}),

new htmlChunkPlugin({

template:‘index.html‘,//自定义模板

filename:‘index-[hash].html‘,//生成文件名

inject:‘head‘,//指定链接注入在<head>标签中还是<body>标签中,为false值时表示不自动注入文件中,需要手动设置

title:‘webpack demo‘,//传递参数,可以在index.html模板中引用

minify:{//压缩html文件,具体参数设置可以查看官方文档

}

})

]

index.html引用配置文件中的参数,JS语法模式,要使用JS语句可以使用<%%>将每行代码包裹起来。赋值可以使用<%=xxx %>,如<%=htmlWebpackPlugin.options.title%>就可以取到配置文件中定义的title的值。

在配置文件中可以任意的配置参数向html文件进行传参。

自定义引用的js文件可以直接写到html文件中

如在html文件中相对应的位置写,<script src="<%=htmlWebpackPlugin.files.chunks.main.entry %>"></script>

<script src="<%=htmlWebpackPlugin.chunks.a.entry%>"></script>

chunk是文件入口

以上是单文件引用的示例,多文件引用则需要调用多次的html-webpack-plugin插件,设置方式相同

多页面使用同一个页面模板,可以定义htmlWebpackPlugin插件中的chunks参数,进行设置不同的页面引用不同的chunks,如设置chunks:[‘main‘,‘a‘]

excludeChunks:[‘a‘],//指出排除的chunk

直接将公共初始化脚本嵌入到html页面中,inline方式,在html模板中加上脚本源码引用代码,

如<script type="text/javascript">

<%=compilation.assets[htmlWebpackPlugin.files.chunks.main.entry.substr(htmlWebpackPlugin.files.publicPath.length)].source()%>

</script>

//.substr()的作用是将删除publicPath部分的绝对路径获取文件的相对路径。

按照文件顺序引用js文件可以手动设置for循环出htmlWebpackPlugin.files.chunks的entry值插入文件中。

20.loader

loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图(和最终的 bundle)可以直接引用的模块。

loader能够import导入任何类型的模块。

在webpack的配置中loader有两个目标:

①.test属性,用于表示出应该被对应的loader进行转换的某个或某些文件。

②.use属性,表示进行转换时,应该使用那个loader。

使用方式:

①配置,在webpack.config.js中指定

②内联,在每个import语句中显示指定loader

③CLI,在shell命令中指定

在webpack.config.js中配置loader

在module.exports中添加属性module

如安装babel插件(js编译器),使用此插件转换ES6代码,如何安装根据官网进行安装:

module:{

rules:[

{ test:/\.js$/,

exclude:/node_modules/,

loader:"babel-loader"

}

]

}

设置preset,指定preset(预配置)设置如何处理js文件

①在rules中设置query:{presets:[‘latest‘]}

②在根目录下创建一个.babelrc文件,其中内容为:

{

"presets":["env"]

}

③在package.json中,增加babel属性:

"babel":{

"presets":["latset"]

}

21.优化

可以在配置文件中,设置打包范围,如exclude设置不处理哪些模块,include处理哪些文件下的内容。

具体可以看官方文档进行配置。

原文地址:https://www.cnblogs.com/cashin/p/8721979.html

时间: 2024-10-30 02:48:00

webpack4安装与学习的相关文章

redis 安装配置学习笔记

redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://download.redis.io/redis-stable.tar.gz 首先必须要有 gcc 与 make apt-get install gcc apt-get install make 1.解压 [email protected]:~# tar -xvf redis-stable.tar.gz 2.测

如何安装和学习OpenStack?

如何安装和学习OpenStack? 学习材料: 什么是OpenStack?http://opensource.com/resources/what-is-openstack OpenStack源码在哪?https://github.com/openstack/ OpenStack API文档以及如何管理OpenStack等链接? http://docs.openstack.org/http://www.rackspace.com/cloud/openstack/getting-startedht

20165230 预备作业3 Linux安装及学习

20165230 预备作业3 Linux安装及学习 安装Linux操作系统 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,开始了虚拟机的安装,根据教程按着步骤一步一步的完成. 遇到的问题: 1.在安装Ubuntu系统软件的时候,点开官网下载页出现了错误,下载未能成功 2.在选择启动盘的时候没有直接选择压缩包,而是解压后选择的文件,出现了安装错误 解决办法: 1.通过求助于同学,得到了Ubuntu系统软件的下载资源,得以成功下载 2.通过重新下载Ubuntu系统软件,并重新选

20165322 预备作业3 Linux安装及学习

Linux安装及学习 安装部分 由于是第一次接触虚拟机知识,之前也没什么了解,我选择完全按照老师教程里的安装vbox虚拟机. 虚拟机安装的过程很顺利,不做详细讲解. 出现的问题 在启动我新建的虚拟电脑时出现了问题.问题显示如下 我在百度以后得到了学姐的帮助.进入BIOS,选择Configuration中的Intel Uirtual Technology,将Disabled改为Enabled 后保存. 我在安装增强功能时显示安装失败.问题显示如下 在查找资料挣扎了很久之后...好吧,发现是我一开始

20165325 预备作业3 Linux安装及学习

Linux安装及学习 一.VirtualBox和Ubuntu安装 问题一:虚拟机中Ubuntu的版本 在设置虚拟机的操作系统的版本时,我发现我的电脑只能设置32-bit的Ubuntu版本.教程上选用了64-bit的,不知道出了什么问题. 不过教程上说只需要选择Ubuntu就行,可能没什么问题. 但我怀疑是我没有下载安装最新版本的Ubuntu,于是在第二部我下载好了以后又回来试一试. 那么问题来了...... 首先是之前下载的网址失效了,我问同学找到了新网址:http://cn.ubuntu.co

20165211 预备作业3 Linux安装与学习

20165211 预备作业3 Linux安装与学习 1. Linux安装 涉及软件:VirtualBox,Ubuntu 参考教程:基于VirtualBox安装Ubuntu图文教程 安装过程的问题 在安装VirtualBox之后,创建虚拟机的过程中,类型为Linux,但在版本里找不到64-bit的Ubuntu. 在网上查找了一些资料之后,我发现是自己的电脑没有开启虚拟化,应该要进入BIOS打开虚拟化.这里真的要吐槽一下win10,我找了很多的方法教程,才终于找到了进入BIOS的方法.这应该也和各个

20165212 预备作业3 Linux安装及学习

20165212 预备作业3Linux安装及学习 Linux虚拟机的安装过程 我像大部分同学一样,通过助教学姐给的Ubuntu下载地址下载映像文件.VB,但是屡次出现问题,不停的闪出一下错误提示窗口: 在像同学求助无果之后我使用VM.Ubuntu安装了Linux虚拟机(安装过程与云班课中的基本相同),并且可以正常使用 Linux学习过程记录及作业 1.Linux系统简介 学习记录 终端模拟器:为了实现在一个窗口中完成用户的输入和输出.本质是Linux上的dev/tty设备,打开方式:ctrl+a

20165216 预备作业3 Linux安装及学习.

Linux 安装及学习 一.关于VirtualBos和Ubuntu的安装 对于本次安装,由于没有安装系统的经验,大多是按照老师的步骤去进行的.在本次安装中,出现的一个较大的问题是虚拟机系统版本中,并没有Ubuntu(64-bit). 一开始我认为可能是程序读取失败,重启后发现仍有问题,在查阅电脑属性的图         (如下图) 以及通过securable验证电脑位数以及是否可运行64位的虚拟机 最后都无问题,最终发现在蓝墨云班课中有同学提出并由另一个同学解决了得,最终通过修改Security

20165336 预备作业3 Linux安装及学习

Linux 安装及学习 一.VirtualBox和Ubuntu的安装 依照老师所给的步骤下载了VirtualBox 5.2.6和Ubuntu 16.04.3. 按照步骤一步一步进行了安装,出现的问题有Ubuntu下载安装错误最后在中文版网址下载安装成功,还有在安装增强功能时,因版本问题增强功能已安装了就没有覆盖安装. 收获:这是自己第一次安装系统,既感到有趣,又感到具有挑战性,不断丰富了自己的经验,让我对学习计算机语言有了更多的期待,虽然在这之间要解决很多问题,但依旧耐着性子寻找答案最终得到了解