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. 转载:HTTP详解

    第一部分: 1. HTTP简介 HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...

  2. mybatis 自定义查询语句

    通过mybatis插件生成的mapper文件只有基本的增.删.改.查.汇总.但是实际使用场景中,总是有各种需要连表.汇总.分组查询的需求,那我们一般都通过自定义查询语句去实现. 有时候会有表结构更改的 ...

  3. Android面向切面编程(AOP)(转)

    转自:https://www.jianshu.com/p/aa1112dbebc7 一.简述 1.AOP的概念 如果你用java做过后台开发,那么你一定知道AOP这个概念.如果不知道也无妨,套用百度百 ...

  4. 如何限制只有某些IP才能使用Tomcat Manager

    只有指定的主机或IP地址才可以访问部署在Tomcat下的应用.Tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve,前者用于限制主机名,后者用于限制IP ...

  5. IIS配置Windows防火墙允许外部访问

    控制面板-Windows防火墙-高级设置-入站规则 在入站规则窗口中找到“BranchCache内容检索(HTTP-In)”选项并启用此规则. 这时候远程用户通过网站地址即可访问站点程序. 但是如果远 ...

  6. java基础学习笔记三(多态)

    多态? 多态是同一个行为具有多个不同表现形式或形态的能力. 存在的必要条件 继承 重写 父类引用指向子类对象 比如: Parent p = new Child(); 当使用多态方式调用方法时,首先检查 ...

  7. js 中数组传递到后台controller 批量删除

    /*批量删除*/function datadel(url) { var ids=[]; $("input[type='checkbox']:checked").each(funct ...

  8. SQL BETWEEN运算符

    SQL BETWEEN运算符 BETWEEN 操作符用于选取介于两个值之间的数据范围内的值. SQL BETWEEN 运算符 BETWEEN运算符选择给定范围内的值.值可以是数字,文本或日期. BET ...

  9. mysql学习-explain中的extra

    覆盖索引就是创建的索引和查询的字段正好个数顺序一致 using filesort:mysql使用了一个外部索引 ,而非表内索引顺序进行访问,,mysql无法利用索引完成的排序操作称为文件索引,如果你创 ...

  10. jdbc 可处理数据库事物的通用增删查改函数

    首先弄清四种隔离级别的和三种数据并发 之间的关系 通用查询函数 //使用PreparedStatement实现对不同表的通用的返回一个对象的查询操作 //使用泛型机制,参数里先传入一个类的类型 pub ...