webpack入门使用教程

标签: webpack

开篇一张图,内容全靠编。一张图直接明了的说明了webpack的作用,bundle your sytles/assets/scripts/images。

webpack中文官网:https://www.webpackjs.com/   官方网站永远都是我们最好的学习途径

1 安装webpack 和 webpack-cli

npm install webpack webpack-cli --save-dev

详见安装指南:https://www.webpackjs.com/guides/getting-started/

2、配置webpack.config.js

新建一个配置文件 :webpack.config.js 。输入一下代码:

const path = require('path')

module.exports = {
    entry:'./src/index.js',
    output:{
        path:path.resolve(__dirname,'release'),
        filename:'bundle.js'
    }
}

3 配置packpage.js

在packpage.js->scripts 中添加一行来运行webpack命令。运行: npm run dev  就可以在relesae中生成bundle.js文件了。

"dev":"webpack --config ./webpack.config.js --mode development"

webpack 打包的文件
babel转换之后的文件

 

4  安装HtmlWebpackPlugin插件

npm install html-webpack-plugin --save-dev

在我们构建之前,你应该了解,虽然在 dist/ 文件夹我们已经有 index.html 这个文件,然而 HtmlWebpackPlugin 还是会默认生成 index.html 文件。这就是说,它会用新生成的 index.html 文件,把我们的原来的替换。如果你在代码编辑器中将 index.html 打开,你就会看到 HtmlWebpackPlugin 创建了一个全新的文件,所有的 bundle 会自动添加到 html 中。

看了上面这段文字你就明白了这个插件的意义了吧。为了更好的演示该插件我们需要再写一个js文件,并在index.js中引入它。

//print.js
export default function printMe() {
    console.log('I get called from print.js!');
}

//index.js
import printMe from './print.js'
printMe()

所以我们需要再次去修改我们的webpach.config.js文件。这次入口有两个文件index.js 和 print.js。app和print 算是别名吧。所以output也需要修改。[name].bundle.js,这就会根据别名生成两个独立的bundle文件了。关于plugins有很多配置项,这里只配置了一个title,可以直接配置一个html模板。

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    entry:{
        app:'./src/index.js',
        print:'./src/print.js'
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new HtmlWebpackPlugin({
            title: 'Output Management'
            //template:'./index.html' 
        })
    ],   
}

运行 npm run dev 会在dist目录下面生成三个文件,其中index.html里面也自动引入了生成的两个js文件。不需要我们在去手动配置了。

我们在index.js中已经引入了print.js,在打包生成的index.bundle.js中就会包含 print.js中的代码。所以在entry中没有必要再写一个print: './src/print.js'了。entry对象中的js会自动插入index.html的body中,这样会重复添加了,这应该是官方文档的一个小失误吧。如果两个js文件没有关联,则可以在entry中加入。

代码重复编译的问题在大型项目中是个不可忽视的问题,因此官方提供了一种解决方法叫代码分离。

代码分离是 webpack 中最引人注目的特性之一。此特性能够把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件。代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间。

有三种常用的代码分离方法:

  • 入口起点:使用 entry 配置手动地分离代码。
  • 防止重复:使用 CommonsChunkPlugin 去重和分离 chunk。
  • 动态导入:通过模块的内联函数调用来分离代码。

 

你可能已经注意到,由于过去的指南和代码示例遗留下来,导致我们的 /dist 文件夹相当杂乱。webpack 会生成文件,然后将这些文件放置在 /dist 文件夹中,但是 webpack 无法追踪到哪些文件是实际在项目中用到的。

通常,在每次构建前清理 /dist 文件夹,是比较推荐的做法,因此只会生成用到的文件。让我们完成这个需求。

clean-webpack-plugin 是一个比较普及的管理插件,让我们安装和配置下。

npm install clean-webpack-plugin --save-dev

修改webpack.config.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')

module.exports = {
    entry:{
        app:'./src/index.js',
        print:'./src/print.js'
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new CleanWebpackPlugin(['dist']),
        new HtmlWebpackPlugin({
            //title: 'Output Management',
            template:'./index.html'
        })
    ],   
}

现在执行 npm run dev,再检查 /dist 文件夹。如果一切顺利,你现在应该不会再看到旧的文件,只有构建后生成的文件!

 

5 使用 source map

当 webpack 打包源代码时,可能会很难追踪到错误和警告在源代码中的原始位置。例如,如果将三个源文件(a.js, b.jsc.js)打包到一个 bundle(bundle.js)中,而其中一个源文件包含一个错误,那么堆栈跟踪就会简单地指向到 bundle.js。这并通常没有太多帮助,因为你可能需要准确地知道错误来自于哪个源文件。

为了更容易地追踪错误和警告,JavaScript 提供了 source map 功能,将编译后的代码映射回原始源代码。如果一个错误来自于 b.js,source map 就会明确的告诉你。

source map 有很多不同的选项可用,请务必仔细阅读它们,以便可以根据需要进行配置。

对于本指南,我们使用 inline-source-map 选项,这有助于解释说明我们的目的(仅解释说明,不要用于生产环境):

添加一行代码就可以使用该功能了。devtool: 'inline-source-map',下面是出错后的提示信息,我在后面添加了中文的句号,所以报错。

6 安装webpack-dev-server

每次要编译代码时,手动运行 npm run dev就会变得很麻烦。

webpack 中有几个不同的选项,可以帮助你在代码发生变化后自动编译代码:

  1. webpack's Watch Mode
  2. webpack-dev-server
  3. webpack-dev-middleware

多数场景中,你可能需要使用 webpack-dev-server

webpack-dev-server 为你提供了一个简单的 web 服务器,并且能够实时重新加载(live reloading)。让我们设置以下:

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

修改配置文件,告诉开发服务器(dev server),在哪里查找文件:

webpack.config.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')

module.exports = {
    entry:{
        app:'./src/index.js',
        print:'./src/print.js'
    },
+   devtool: 'inline-source-map',
+   devServer:{
+       contentBase:'./dist',
+       open:true,
+       port:9000
+   },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'[name].bundle.js'
    },
    plugins:[
        new CleanWebpackPlugin(['dist']),
        new HtmlWebpackPlugin({
            //title: 'Output Management',
            template:'./index.html'
        })
    ],   
}

以上配置告知 webpack-dev-server,在 localhost:9000 下建立服务,将 dist 目录下的文件,作为可访问文件。

让我们添加一个 script 脚本,可以直接运行开发服务器(dev server)。

package.json部分代码。代码中--config ./webpack.config.js --mode development 不是必须的,因为系统会自动去寻找congif配置文件,mode也有默认的模式。

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "babel src -d release",
    "dev": "webpack --config ./webpack.config.js --mode development",
+   "start":"webpack-dev-server --config ./webpack.config.js --mode development"
  },

现在,我们可以在命令行中运行 npm run start,就会看到浏览器自动加载页面。如果现在修改和保存任意源文件,web 服务器就会自动重新加载编译后的代码。

上面我们使用了CleanWebpackPlugin插件,所以运行命令后dist文件夹就会删除了,而且不会再再生成了。因为重新编译文件只在内存中。要想得到它们,我们需要关闭服务,再去执行上面的npn run dev 命令。

运行npm start 也可以,关闭服务器的快捷键是 Ctrl+c ,好像很多命令行取消服务都是这个组合键。

总结:

webpack的基本使用对比较简单。我这里只安装了四个依赖包已经一个配置文件webpack.config.js,主要用在开发环境。

  1. "html-webpack-plugin": "^3.2.0",
  2. "webpack": "^4.17.1",
  3. "webpack-cli": "^3.1.0",
  4. "webpack-dev-server": "^3.1.7"

问题:

webpack和babel如何结合在一起使用,详见下篇笔记:webpack中babel配置教程。

 

版权声明:本文为lin5165352原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lin5165352/article/details/82285972

智能推荐

Vue入门04-webpack入门使用

目录 安装webpack 配置webpack 使用webpack 第一步:创建一个项目 第二步:创建一个名字为modules的目录 第三步:在moudles下创建模块文件 第四步:在moudles下创建一个名为main.js的入口文件,用于打包时设置entry属性 第五步:在项目目录下创建webpack.config.js配置文件 第六步:使用webpack命令打包 第七步:测试我们自己生成的js...

webpack4使用教程之loader

目录 1 css-loader 1.1 新建文件 1.2 在入口文件里添加引用 1.3 安装和配置css-loader 2 less-loader 2.1 创建文件 2.2 在入口文件里添加引用 2.3安装和配置less-loader 3.1 配置和安装url-loader 3.2 安装和配置file-loader 3.3 设置文件名 3 ES6语法处理 webpack里面有很多loader,这里...

webpack 简单的安装使用教程

webpack 简单的安装使用教程 安装 Node.js 使用 cnpm 安装 webpack 使用webpack 1. 创建项目,在目录下添加 js文件和 html 文件 2. 修改first.html 3. 修改test.js 4. cmd进入项目文件夹 5. 然后使用 webpack 命令打包 6. 接下来在浏览器中打开 first.html 在安装 Webpack 前,你本地环境需要支持 ...

Mybatis基础(part 1)

一.mybatis调用SQL语句 1.使用XML配置SQL语句 在SqlMapConfig.xml配置数据源并指定映射配置文件的位置(每个DAO对应的XML文件,该文件映射了DAO的全限定类名)   2.使用注解配置sql语句 在SqlMapConfig.xml配置数据源和class属性(指定被注解的dao全限定类名),在DAO上写注解。 用注解来配置,故此处使用class属性指定被注解...

Docker 容器内运行 Dubbo 服务

原文:http://www.aqcoder.com/post/content?id=41 在使用 Docker 容器内运行 Dubbo 服务的时候一个令人很头痛的问题就是服务地址注册。 Docker 容器内有自己的 IP 段,和宿主主机是隔离的,Dubbo 会使用容器内的 IP 注册到 zookeeper 注册中心上。这样其他的服务是无法访问的。 方式一:–host 一个很直接的方案就...

猜你喜欢

python基础教程

Python基础教程 一、简介 1.1 python语言介绍 python的创始人:Guido Van Rossum Python下载地址:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Pycharm下载地址:https://www.runoob.com/w3cnote/pycharm-windows-instal...

1、Git安装与配置

1、Git安装与配置 一:版本控制 定义:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 为什么要用版本控制:在起初的项目开发中,我们会不断的编写代码,但是,害怕有一天系统突然挂掉了,完蛋,辛苦写的代码就这么没了,所有为了防止这一点,都会开发一点就以目录拷贝的形式保存下来,自己这么1.0、2.0、3.0…的这么去标记,开始的还好,后面的话你压根就不知道...

Golang net/rpc 包的深度解读和学习

Golang 提供了一个开箱即用的RPC服务,实现方式简约而不简单。本文对net/rpc 包做深度解读和学习实战。 RPC 简单介绍 远程过程调用 (Remote Procedure Call,RPC) 是一种计算机通信协议。允许运行在一台计算机的程序调用另一个地址空间的子程序(一般是开放网络中的一台计算机),而程序员就像调用调用本地程序一样,无需额外做交互编程。RPC 是一种 CS (Clien...

merge sort

归并排序(merge sort) 具体算法: I.对原数组进行分组:对数组进行遍历,每检测出一个有序序列则记录一个分组,一般分组都是上升序列,下降序列也会被转换成上升序列 II.对两两相邻的分组进行合并,合并后的分组也将被记录 III.迭代合并之前合并后的分组直到出现最后的一个有序的大分组,也就是排序的最终结果 java.util.DualPivotQuicksort类中的static void ...

Java函数的学习

java学习 百知教育学习 - 胡鑫喆 - Java函数的学习 01_函数的定义 函数的定义 概念:实现特定功能的一段代码,可反复使用 定义语法: 函数名称许遵循命名规范 函数定义在类的内部,与main函数并列,并且使函数产生作用,需进行函数的调用 使用函数去掉冗余代码 02_函数的参数 函数的参数(函数名称() 其中()就是一个参数表) 无参函数(01_函数的定义中的下划线就为无参函数) 有参函...