webpack的官网:http://webpack.github.io/

安装webpack

  1. 演示项目安装,使用全局安装:npm install webpack -g
  2. 真正的项目使用依赖式安装,保证在其他机器上也能运行,不依赖全局的webpacknpm install webpack --save-dev
  3. 项目常用命令:
    npm init
    npm install webpack --save-dev

配置

  1. 可以在命令行直接制定配置,正式项目中不会使用此种方式
  2. 在项目根目录新建文件webpack.config.jswebpack会自动找此配置文件,正式项目中使用此种方式
  3. webpack会自动处理requirejs文件,其他文件(如:cssimage)需要使用loader,使用前需要先下载
  4. loader下载命令:npm install url-loader -save-dev
  5. 运行webpack使用:webpack --display-error-details,后面的参数“--display-error-details”是推荐加上的,方便出错时能查阅更详尽的信息(比如 webpack 寻找模块的过程),从而更好定位到问题。
  6. webpack的主要命令有:
    $ webpack --config XXX.js   //使用另一份配置文件(比如webpack.config2.js)来打包
    
    $ webpack --watch   //监听变动并自动打包
    
    $ webpack -p    //压缩混淆脚本,这个非常非常重要!
    
    $ webpack -d    //生成map映射文件,告知哪些模块被最终打包到哪里了
  7. externals用于关联外部依赖,如jquery可以在外部使用script形式引入,如下:
    module.exports = {
    entry: "./src/index.js",
    output: {
    path: "./build/",
    filename: "main.js",
    publicPath: "../build"
    },
    externals: {
    "jquery": "jQuery"
    },
    module: {
    loaders: [
    { test: /\.css$/, loader: "style!css" },
    { test: /\.html$/, loader: "html" },
    { test: /\.jpg|\.png$/, loader: "file?name=/image/[path][name].[ext]" }
    ]
    }
    }

之后在代码中引入jquery可用var $ = require("jquery");形式,webpack生成的代码如下:

```

// 源代码

var $ = require("jquery");

// webpack生成代码片段

var $ = __webpack_require__(8);

/* 8 */
/***/ function(module, exports) { module.exports = jQuery; /***/ }
```
  1. 像jquery这样的形式,可以不引用到模块中,直接使用,如$("#demo").html(dom);,但是建议使用模块化语句,保持统一

css-loader

概要

  1. github地址:https://github.com/webpack/css-loader
  2. 安装命令:npm install css-loader --save-dev

'Root-relative' urls

如果url以“/”开头,默认情况下不会转换,如:

url(/image.png) => url(/image.png)

可以使用root参数统一设置,如:

loaders: [ { test: /\.css$/, loader: "style-loader!css-loader?root=." }, ... ]

结果:

url(/image.png) => require("./image.png")

Local scope

  1. 使用:local:global命令声明
  2. api中关于命令的描述没看明白,根据自己理解应该是,带括号的可以指定一行中的某一个class,不带括号的标识这行都是制定的模式。原文:With :local (without brackets) local mode can be switched on for this selector. :global(.className) can be used to declare an explicit global selector. With :global (without brackets) global mode can be switched on for this selector.
  3. 不建议使用ID做样式的选择器,使用class替代ID,原文:You can use :local(#someId), but this is not recommended. Use classes instead of ids
  4. css类的默认命名规则是[hash:base64],可以自定义css类的命名规则,如:css-loader?localIdentName=[path][name]---[local]---[hash:base64:5]
  5. 可以使用css-loadermodules参数修改为默认开启Local scoped模式,如:css-loader?modules

压缩css

  1. 使用css-loader参数minimize压缩css文件的大小,格式如下:css-loader?minimize

问答

  1. 如何把css单独达成一个文件

    • 答:使用插件:ExtractTextPlugin,配置如下
      var ExtractTextPlugin = require("extract-text-webpack-plugin");
      module.exports = {
      entry: {
      main: "./src/index.js"
      },
      output: {
      path: "./build",
      filename: "[name].js",
      publicPath: "http://cdn.example.com/[hash]/"
      },
      module: {
      loaders: [
      // 把css样式打包到js中
      // {test: /\.css$/, loader: "style!css?localIdentName=[name]__[local]___[hash:base64:5]"},
      // 把css样式单独成一个文件
      {test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader?localIdentName=[name]__[local]___[hash:base64:5]")},
      {test: /\.html$/, loader: "html"},
      { test: /[\.jpg|\.png]$/, loader: "file?name=[path][name].[ext]" }
      ]
      },
      plugins: [
      new ExtractTextPlugin("[name].css")
      ]
      }

关于 webpack 的研究的更多相关文章

  1. webpack+vue多入口环境搭建

    项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...

  2. vue坑

    项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...

  3. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_09-webpack研究-webpack介绍

    使用vue.js开发大型应用需要使用webpack打包工具,本节研究webpack的使用方法. 1.3.1 webpack介绍 Webpack 是一个前端资源的打包工具,它可以将js.image.cs ...

  4. 研究了一下 Webpack 打包原理,顺手挣了个 AirPods Pro

    这些年,Webpack 基本成了前端项目打包构建的标配.关于它的原理和用法的文章在网上汗牛充栋,大家或多或少都看过一些.我也一样,大概了解过它的构建过程以及常用 loader 和 plugin 的配置 ...

  5. 深入研究webpack之Tree Shaking相关属性sideEffects用处

    Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...

  6. webpack 3.X研究

    目前webpack已经到了3.X版本,为了方便通过最新版本打包整个前端应用,现在开始对webpack操作进行简单介绍. 一.webpack安装 在安装webpack之前需要注意,webpack是通过n ...

  7. webpack集成vue单文件模式的很多坑(研究了1个星期)

    1.一开始不知道局部安装webpack后,如何调用webpack. 后来看说明文档(webpack中文网)才知道,有个npx可以启动本地安装的webpack. 我估计:全局安装webpack,全局的w ...

  8. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_12-webpack研究-webpack安装

    npm默认安装配置的路径配置在nodejs的node_modules目录 j加上 -g 就是全局安装 后面只写webpack默认安装的是最新版本 指定版本号 视频中建议指定版本号进行安装

  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_13-webpack研究-webpack入门程序

    创建webpack测试的目录 定义webpack的入口文件 mdel01必须导出,main里面才能导入 导出多个 数组的写法 main是入口文件,里面已经引入了vue.min和model01.js   ...

随机推荐

  1. python模块打补丁

    先自定义两个模块,然后,我们调用模块时,用打补丁方式,改写mod_1.py模块.为mod_2.py内容:其实这就相当于,在不改动mod_1.py模块的前提下,打上补丁. 写这个主要是gevent协程的 ...

  2. 力扣 — Rotate List()

    题目描述: 中文: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ...

  3. Java高频经典面试题(第一季)五:递归与迭代

    编程题:  有n步台阶, 一次只能上 1步 或 2步, 共有多少种走法? 递归 循环迭代 递归: package will01; import org.junit.Test; public class ...

  4. Python3.5-20190519-廖老师-自我笔记-获取对象信息

    总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”. 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象 ...

  5. ECUST_Algorithm_2019_3

    简要题意及解析 1001 给出一个\(n\times m\)连连看的局面,下面有\(q\)次询问:两个位置的块能否消去,即两个位置的连线是否能少于两次转折,回答\(YES/NO\).与一般的连连看不同 ...

  6. 21.Semaphore信号量

    Semaphore是一种基于计数的信号量.它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞.Semaphore可以用来构建一些对象池,资 ...

  7. 关于python接口测试connect error

    接口测试里如果报错出现 socket.gaierror: [Errno 8] nodename nor servname provided, or not known 或者 urllib3.excep ...

  8. string.format()详解

    java中: 从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 format().这个方法到现在用的人还是不多,实在是一种浪费.本文带你快速过一遍这个方法的功能,将来你要用 ...

  9. Cloudera Hadoop启用Kerberos认证

    一.Kerberos 二.安装 node01服务器安装Kerberos的核心服务master KDC,node02和node03安装Kerberos client cm也安装在node01上了 1.m ...

  10. 【leetcode】921. Minimum Add to Make Parentheses Valid

    题目如下: 解题思路:上周都在忙着参加CTF,没时间做题,今天来更新一下博客吧.括号问题在leetcode中出现了很多,本题的解题思路和以前的括号问题一样,使用栈.遍历Input,如果是'('直接入栈 ...