最近花了两周的休息时间学习了webpack,能够可以编写自己项目所需要的配置文件,总体来说webpack是一种非常优秀的前端模块化的打包工具,非常值得花时间来研究学习。

什么是webpack,它的出现是为了解决什么问题?

webpack是一种可以融合各种前端新技术的平台,我们只需要简单地配置就可以使用jsx和typescript等一些前端新语法,得益于社区的发展,当我17年第一次接触webpack的时候,还都是英文文档,现在已经有很多优秀的中文入门教程和工程实践

我们开始配置我们的webpack.config.js

主要的api

1、entry(项目入口)  

  字符串,如entry:"./src/index.js"

  数组形式: 如entry:[react, react-dom],可以把数组中的多个文件打包转换为一个chunk

  对象形式,如果需要配置的是多页的应用,或者我们哟啊抽离出指定模块作为指定公共代码,需要采用这种形式,属性名是占位符[name]的值

   如:

entry: {

  main:'./src/index2.js',

  second: './src/index2.js',

  vendor:['react', 'react-dom']

}

2、output(出口文件)

   会告诉webpack在哪里输出所创建的bundle.js以及如何命名

   out:{

    path:path.join(__dirname, './dist'),

    name: 'js/bundle-[name]-[hash].js,

    chunkFilename: 'js/[name].chunk.js',

    publicPath:'/dist/'

  }

3、module(模块的处理)

webpack只能处理js文件,浏览器也可能不识别一些最新的js语法,所以我们就要对传入的模块做一些预处理,这就涉及到了webpack的又一核心概念“loader”’

loader的作用和基本用法

webpack中,loader的配置主要在module.rules中进行,这是一个数组,每一个rule做了两件事

  • 识别文件类型,来确定具体处理该数据的loader(Rule.test属性)
  • 使用相关的loader对文件进行相关的操作转换(Rule.use属性)     

比如我们想要处理react中的jsx语法

module: {

  rules:[{

    test: /(\.jsx|\.js)/,  //表示匹配规则,是一个正则表达式

    use:{        //表示针对匹配文件将使用处理的loader

      loader: "babel-loader",  

      options: {

        presets: ["es2015", "react"]

      }

    }

  }]

}

常用的loader:

  转换编译:script-loader, babel-loader,ts-loader,coffee-loader

  处理样式:style-loader,css-loader,less-loader,sass-loader,postcss-loader

  处理文件:raw--loader,url-loader,file-loader

  处理数据:csv-loader,xml-loader

  处理模板语言:html-loader,pug-loader,jade-loader,markdown-loader

  清理和测试:mocha-loader,eslint-loader

  此外还有许多loader,可以到loader文档里查询

4、plugin(loader不能做的处理都能交给plugin来做)

const CleanWebpackPlugin = require("clean-webpack-plugin")

{

  ...

  plugin:[

    new webpack.DefinePlugin({

      "process.env" : {

        NODE_ENV: JSON.stringify("production")

      }

    }),
    new CleanWebpackPlugin(["js"], {       root: __dirname + "/stu/",
      verbose: true,
      dry: false
    })
  ] }

一种插件就是一种函数,通过传入不同的参数,可以实现不同的功能,webpack让人觉得难学的地方之一是哟啊自己封装plugins,对于我们大多数人来说,需要掌握的plugins并不是那么多,用的时候再查就可以

5、一些辅助开发的相关属性

  devtool:打包后的代码和原始代码存在较大的差异,此选项控制是否生成以及如何生成sourcemap

  devserver:通过配置devserver选项,可以开启一个本地服务器

  watch:启用watch模式后,webpack将持续监听热河已经解析文件的更改,开发是开启会很方便

  watchoption:用来定制watch模式的选项

  performance:打包后命令行如何展示性能提示,如果超过某个大小是警告还是报错

  

对于webpack配置,要区分开发环境还是产环境

下面是文档的建议

我们为了避免重复应该提取公共代码

所以一般有这么几个文件

webpack.config.js

webpacl.dev.js

webpack.prod.js

webpack.common.js

此外还有单独配置babel的文件babelrc,webpack可以自动识别

如果大家想跟着配置一个webpack.config.js文件,可以参考入门webpack,看这篇就够了

还有文档可以仔细看一下webpack中文文档

webpack的基本配置和一些理解的更多相关文章

  1. react+webpack开发环境配置

    react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...

  2. webpack的简单配置

    本人刚开始也不会写webpack配置,刚开始在网上搜索了了一些,看的也是刚刚理解,所以准备自己写下来,已作纪念和贡献给像我一样不会配置的“童鞋”们! 1.创建webpack配置文件 在项目文件下创建一 ...

  3. 深入浅出 webpack 之基础配置篇

    前言 前端工程化经历过很多优秀的工具,例如 Grunt.Gulp.webpack.rollup 等等,每种工具都有自己适用的场景,而现今应用最为广泛的当属 webpack 打包了,因此学习好 webp ...

  4. vue第二单元(webpack的配置-学习webpack的常用配置)

    第二单元(webpack的配置-学习webpack的常用配置) #课程目标 掌握webpack的常用配置 掌握如何根据实际的需求修改webpack的对应配置 了解webpack-dev-server的 ...

  5. webpack + vuejs 基本配置(一)

    开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack2.Vue.js3.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在你实 ...

  6. webpack react基础配置一

    简单介绍webpack react基本配置,入门型: 环境配置: 依赖nodejs,官网下载最新版的nodejs:nodejs.org/en 安装完nodejs  npm便自动集成了,通过npm安装其 ...

  7. webpack 多entry 配置

    // webpack 多entry 配置var path = require('path'); module.exports = { entry: { entry2: './entry.js', de ...

  8. Webpack 2 视频教程 019 - Webpack 2 中配置多页面编译

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  9. Webpack的基本配置

    一.优化项目结构,创建相关的文件,项目结构如下:src文件夹存放相关js文件,index.html项目的首页面,dist文件夹是webpack 打包 目录. index.js内容为: alert('我 ...

随机推荐

  1. 【VMware】无法连接MKS:套接字连接尝试次数太多;正在放弃

    启动我的电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服务: 将当前服务全部进行启动

  2. ajax实现的点击数目加1代码实例

    ajax实现的点击数目加1代码实例:在点击按钮实现数字增加效果代码实例一章节中,介绍如何点击按钮实现数字加1的效果,但是好像并没有什么实际用处,下面就分享一段相对完整的能够在实际应用中派上用场的代码, ...

  3. [转]微信小程序(应用号)是什么,是否值得投入进来做?

    本文转自:http://www.woshipm.com/it/417887.html 距离张小龙的那场首次公开演讲已经有九个月了,而在那场演讲中备受关注的「应用号」在千呼万唤中终于以「小程序」的名字正 ...

  4. 8、列表:ion-list

    1.基本样式 no-lines 属性 隐藏列表项之间的分割符 inset 属性 去掉 ion-list的 外边框. 默认 的 ion-list 是有外边框的.   /* ---示例代码----*/ & ...

  5. mysql应用学习-在cmd命令窗口下创建数据库和表

    运行以下操作,请确认您已经正确安装和配置了mysql. 首先要运行cmd.exe,进入命令窗口. step1. 进入MySQL monitor 如果您已登录mysql,可直接进入step2;若未登录请 ...

  6. 使用IDEA创建java项目(hello word)

    前提:已安装好jdk,配置好环境变量.我使用的是java 8. 首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject: 1,第一步打开idea 第二步选择创建ja ...

  7. C#利用事件与委托进行窗体间传值简单小例子

    本篇博客是利用C#委托与事件进行窗体间传值的简单小例子 委托与事件的详细解释大家可以参照张子阳的博客: http://www.tracefact.net/CSharp-Programming/Dele ...

  8. Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配

    1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...

  9. python数据类型(数字\字符串\列表)

    一.基本数据类型——数字 1.布尔型 bool型只有两个值:True和False 之所以将bool值归类为数字,是因为我们也习惯用1表示True,0表示False. (1)布尔值是False的各种情况 ...

  10. vue+rest-framework前后端分离整合

    一.vue部分 二.django路由配置 (1)项目urls.py修改如下: from django.conf.urls import url, include urlpatterns = [ # p ...