最近花了两周的休息时间学习了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. ionic 打包安卓包 (debug调试版和 release发布版)

    一.配置环境: 先按照之前的文章,配置好环境需要: 安装jdk,配置环境变量:( http://www.cnblogs.com/loveyaxin/p/7520618.html) 安装android- ...

  2. sqlserver 限制用户只能访问指定的视图

    项目中有一个需求,要求给其它单位提供数据,我们用到了视图,并要求不能让他们看到数据库中的其它数据,我们为其创建了单独的账号,并只能看到指定视图 一.创建视图 CREATE VIEW [dbo].[v_ ...

  3. 两个三汇API使用的坑

    最近呼叫中心走火入魔了,我的<一步一步开发呼叫中心>系列编写过程中,遇到各种的问题,今天晚上,来记录一下纠结了我N久的一个问题: 内线通过板卡外呼时,如果对方的呼叫中心需要发送按键响应(如 ...

  4. python之高阶函数filter

    原文 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返 ...

  5. typeScript入门(二)函数与类

    3.ts的函数 1)函数的返回值和参数 在函数的定义需要定义其的返回值可以void,来表示没有返回值 函数参数的定义,举个例子分析下吧 name:string,age?:number=23 冒号后面是 ...

  6. html网页访问WebAPI中的方法遇到的问题

      1.移动端访问远程服务时,建议使用WebAPI 2.用不同浏览器访问WebAPI时返回的文本格式是不同的,Chrome Firefox将在浏览器中以XML形式显示此列表,IE浏览器将获得Json格 ...

  7. 【起航计划 032】2015 起航计划 Android APIDemo的魔鬼步伐 31 App->Search->Invoke Search 搜索功能 Search Dialog SearchView SearchRecentSuggestions

    Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息.Android平台为所有需要提供搜索或是查询功能的应用提 供了一个统一的Search Framew ...

  8. pringMvc-使用原生api

    在springMvc有时候需要使用原生的api: @RequestMapping(value="/testApi") public String testApi(HttpServl ...

  9. python中的 if __name__ == “__main__”: 有什么用

    https://stackoverflow.com/questions/419163/what-does-if-name-main-do# 问题: What does if name == " ...

  10. poj 1753、2965枚举

    1753题目链接 题目大意: 一个4乘4的棋盘,上面放满了正反两面分别为黑和白的棋子,翻转一个棋子会让这个棋子上下左右的棋子也翻转,给定一个初始状态,求使所有棋子颜色相同所需的最少翻转次数. 解题思路 ...