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. Codeforces 354C 暴力 数论

    题意:给你一个数组,你可以把数组中的数减少最多k,问数组中的所有数的GCD最大是多少? 思路:容易发现,GCD的上限是数组中最小的那个数,而因为最多可以减少k,及可以凑出来的余数最大是k,那么GCD的 ...

  2. Session的load和get方法区别是什么?

    ①如果没有找到符合条件的记录,get方法返回null值,而load方法会抛出异常: ②get方法直接返回实体类对象,load方法返回实体类对象的代理: ③在Hibernate3之前,get方法只在一级 ...

  3. java--ArrayList,LinkedList应用比较

    import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class ListDem ...

  4. jstat详解

    jstat 1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间. 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时 ...

  5. 【Vue】vue的双向绑定原理及实现

    vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象是个什么东西. 代码: var ...

  6. Mybatis缓存+配置

    mybatis提供了缓存机制减轻数据库压力,提高数据库性能 mybatis的缓存分为两级:一级缓存.二级缓存 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效 二级缓 ...

  7. Shell脚本并发及并发数的控制

    https://www.jianshu.com/p/701952ffb755 正常情况下,Shell脚本是串行执行的,一条命令执行完才会执行接下来的命令.如下代码: # !/bin/bash for ...

  8. 【dart学习】之运算符重载

    一,什么是运算符重载(operator overloading) 在软件开发过程中,运算符重载(英语:operator overloading)是多态的一种.运算符重载通常只是一种语法糖,这种语法对语 ...

  9. delphi 随意将函数执行权限提高到Ring0源代码

    //随意将函数执行权限提高到Ring0源代码//Windows 2K以上的操作系统,//用途: 提供超级简单使用的APIrocessRing0(),//可将delphi中的任意函数由原來的Ring3权 ...

  10. 原来... 用debug如何查看当前标志寄存器的标志位值?

    -r 用这个指令,得到的信息右下角: NV   UP   EI   PL   NZ   NA   PO   NC这些符号代表的就是标志寄存器里常用标志位的值. 这个是符号值对应表: 溢出标志OF(Ov ...