zoukankan      html  css  js  c++  java
  • webpack学习笔记

    整理学习资料, 就发上来了

     webpack启程---

      历史介绍
      2009年,commonjs规范还未出来,此时前端开发人员编写的代码都是非模块化的,那个时候开发人员经常需要十分留意文件加载顺序所带来的依赖问题, 与此同时 nodejs开启了js全栈大门,而requirejs在国外也带动着前端逐步实现模块化, 同时国内seajs也进行了大力推广
       
    AMD 异步模块定义 requirejs
    CMD common module define seajs和nodejs非常相似

    commonjs包含模块定义,和CMD比较相似

     npm集中包管理的方式备受青睐,12年bower、browserify诞生
     此时爆发大量前端工具 webpack也在其中,其是一款模块打包工具、systemjs跟angular抱大腿,angular4用了systemjs

     webpack优点

      1. 模块来源广泛,支持包括npm/bower等等的各种主流模块安装/依赖解决方案
      2. 模块规范支持全面,amd/cmd以及shimming等一应具全
      3. 浏览器端足迹小,移动端友好,却对热加载乃至热替换有很好的支持
      4. 插件机制完善,实现同样模块化,容易扩展

     webpack基本操作

       `npm i webpack -g `
         `webpack 原文件 新文件`
         通过命令行使用。首选找到入口文件是.js
         也就是你html中引入的js文件
         `webpack ./main.js ./build.js -p`
          -p代表压缩

      1. 使用webpack打包解决文件依赖关系
         webpack 基本命令
         `webpack ./index.js ./build.js`
        会以index.js作为入口分析文件依赖关系,合并文件

      2. 使用webpack配置文件
          默认命令结构是 `webpack 入口文件(entry) 出口文件(output)`, 也可以使用配置文件来操作, 当我们`使用webpack命令`的时候, 该命令行工具会自动查找我当前目录下的webpack.config.js, 文件内部是一整个被Module.exports导出的对象
      

    代码: 
      module.exports = {
        entry:{
          'main':'./main.js'
            },
        output:{
          filename:'./build.js'
            }
        }

      关于文件的依赖问题,webpack会自动解析, 默认可以走commonjs模块规范

    3. 引入css问题
        由于涉及到了css和style
         顺序:我们应该先处理一下css再处理style
         配置文件中的module属性
        他是一个对象,可以有loaders属性
         loaders:[是loader]
         loader的样子是这样{ test:/.css$/,loader:'style-loader!css-loader'}
         由于需要引入loader所以先需要下载并且配置
         npm i css-loader style-loader -D 
         webpack中你看到s复数,就是数组

       操作流程:
          构建index.css
          通过require('./index.css');将其引入进来,告知webpack找到对应的依赖
          安装响应的依赖
           开发依赖凡是打包的 `npm i style-loader css-loader -D`
           在webpack.config.js文件中加入

        代码: 
        module.exports = {
          //设置入口文件
          entry:{
            'main':'./main.js' //默认main就会作为启动
          },
          //设置输出文件
          output:{
            filename:'./build_new.js'
          },
           module:{ //设置相关模块的声明
            loaders:[ //每一个元素都是对象
          {
            test:/.css$/,//设置匹配文件
            loader:'style-loader!css-loader' //设置依赖的加载器
            }
          ]
         }
      }
     

     sublime terminal配合
       preference-> package settings
       terminal -> settings default


      {
        // window下终端路径
        "terminal": "D:\cmder\Cmder.exe", //你的文件解压路径
        // window下终端参数
        "parameters": ["/START", "%CWD%"]
      }

     es6

       import 不能再函数中使用,一定顶层中,习惯性都写在最上方
       import和commonjs不一样 是import 和export
      没有用default 的export 你怎么导出的,我就得怎么导入,叫做按需加载,可以导入部分
       没有默认导出的:
      导出方: 声明式` export var num1 = 1; //{num1} export var num2 =2; {num1,num2}`
       以上语句最终相当于 `向外暴露了 {num1,num2}`
       导入方: 就得和其写法一致,当然可以选择部分 `import {num1,num2} from './cal.js`
      有默认导出的__可以在引入的时候不必名称完全一致__
       导出方 : `export default obj;`
       导入方:`import 别名 from './cal.js'; `
      默认导出也还有使用* 号的方式,那么就代表着被导出的内容全拿

       webpack-ES6的处理

         webpack.config.js文件中
        loaders下加入一个对象
         test:指定是.js文件后缀的进行处理
         loader:'babel-loader', //需要下载,依赖babel-core
         exclude:/node_modules/,排除路径
         options: 对象
         内部: presets:['es2015'],预设解析es6关键字
         plugins:['transform-runtime'], //解析es6的函数
        下载的名称:
        npm i babel-loader babel-core babel-preset-es2015 babel-plugin-transform-runtime  
         需要自动补前缀: autoprefixer-loader

       less的使用

        1:安装对应包
          编译less-loader需要less的支持
           less不必写入到loader中
           安装 `npm i less less-loader -D`

         sass的使用
           1:安装对应包
           加载器是sass-loader
           其依赖的是node-sass
           node-sass不必写入到loader中
           安装 `npm i sass-loader node-sass`

        3.  处理图片
           1:安装对应包
            加载器是url-loader
            其依赖的是file-loader
             file-loader不必写入到loader中
             安装 `npm i url-loader file-loader`

        4. 处理字体图片

          在url-loader中加入ttf的后缀名来处理
           ?limit=1,如果设置过于小,这个图片就会生成一个文件,占用一次请求
           包括字体图片也是一样

        5.  base64编码
           base64编码邮件形式、将比较小的图片可以通过base64的形式放入到css中
           对于图片本身来讲,跟css共同用了一次
           使用的时候,图片不宜过大,base64编码会将原来的图片大小增加三分之一
           由A-Za-Z0-9+/ 组成,以==结尾

        6. 生成html文件插件

           安装包
            npm i html-webpack-plugin webpack -D 
             html-webpack-plugin 自动生成html文件到dist目录
           webpack是其依赖

      ES6中的模块

      没有默认导出的部分
      导出方:` export var xxx = xxx;` //这个就相当于导出一个{ xxx }
       `var xxx= xx; export = { xxx}`
      以上两种方式对应的获取方式是一样的
      导入方: import { xxx } from './xxx.js';根据其暴露的空对象中的接口获取
       简单来说,就是和他们导出的样子一样即可
       有默认导出的时候
       导出方: `export default obj;`
       导入方: `import objCal from './xxx.js';`
       注意: ES6中规定import不能再函数中,建议要放在代码上方
       比较前面两者的不同: 有默认导出,名字你随意,如果不是默认导出 一定要和导出方暴露接口的形式一致才行

       ES6中的代码变化

        函数声明

        var obj = {
          add:function(n1,n2){
            return n1 + n2;
            },
          sub(n1,n2){ //ES6
            return n1 - n2;
            }
          }

     对象声明

        var name = 123;
         var obj = {
            name //这个时候有一个属性名是name,value是123
            }


    base64 在node中的编码解码
      编码base64:Buffer.from('javascript').toString('base64');
       解码成utf8:Buffer.from('amF2YXNjcmlwdA==','base64').toString();

  • 相关阅读:
    Java调用CMD命令
    java在线截图---通过指定的URL对网站截图
    【好的技术员网站】蓝飞技术部落格==蓝飞技术部落格==蓝飞技术部落格
    事务管理最佳实践全面解析
    Javascript摸拟自由落体与上抛运动 说明!
    dwz中给表单项获取,设置值
    jquery操作select(取值,设置选中)[转]
    Flex 笔记整理 三
    Myeclipse 工具优化 [内存一直增加, jsp,javascript 编辑很卡]
    Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
  • 原文地址:https://www.cnblogs.com/longsf/p/6648525.html
Copyright © 2011-2022 走看看