zoukankan      html  css  js  c++  java
  • webpack之loader

    webpack能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中。

    webpack其中非常重要的一环就是,能够对加载的资源文件,进行一些处理。比如把less、sass文件编译成css文件,负责这个处理过程的,就是webpack的loader。

    如:

    vue-loader 是一个 Webpack 的 loader,可以将指定格式编写的 Vue 组件转换为 JavaScript 模块。Vue组件默认分成三部分,<template>、<script> 和 <style>,而vue-loader,会帮助我们去处理这个vue组件,把其中的html,js,css分别编译处理,最终打包成一个模块。

    loader本质就是接收字符串(或者buffer),再返回处理完的字符串(或者buffer)的过程。

    loader是一个函数,当某种资源需要用这个loader转换时,这个函数会被调用。并且,这个函数可以通过提供给它的this上下文访问Loader API。

    处理一个文件可以使用多个loader,loader的执行顺序是和本身的顺序是相反的,即最后一个loader最先执行,第一个loader最后执行。第一个执行的loader接收源文件内容作为参数,其他loader接收前一个执行的loader的返回值作为参数。最后执行的loader会返回此模块的JavaScript源码。
    如下图,先执行uppercase-first-loader,在执行reverse-txt-loader:

    只要我们想对文件进行处理时,我们都可以去找想对应的loader。那么问题来了,万一找不到想要的loader该怎么办?

    如希望我加载的html文件,都嵌套在一个 layout.html 文件中。这样如果是编写多页应用,我就只需要编写唯一不一样的中心内容,而把网站公共的部分作为layout抽离开来。如下所示:

    <!-- layout.html -->
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>Pure Web</title>
      <meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
    </head>
    <body>
      <header>This is Header</header>
    
      <!-- 我希望我webpack加载的html,都会被嵌套在这个{{__content__}}部分 -->
      {{__content__}}
    
      <footer>This is footer</header>
    </body>
    </html>

    通过loader-utils来获取loader的配置项。通过node的fs.readFileSync去加载文件,loader文件可以这样写:

    module.exports = function (source) {
      const options = loaderUtils.getOptions(this)
      const layoutHtml = fs.readFileSync(options.layout, 'utf-8')
      return layoutHtml.replace('{{__content__}}', source)
    }

    webpack的config增加如下loader配置:

    {
      test: /.(html)$/,
      loader: path.resolve(__dirname, './loaders/replaceLoader.js'),   // 使用本地的loader模块
      include: htmlPath,  // 想要注入layout文件中的html文件
      options: {
        layout: layoutHtmlPath  // layout.html的路径
      }
    }

    原文:https://segmentfault.com/a/1190000011524373

    https://www.jianshu.com/p/cb888d69ca34

  • 相关阅读:
    【翻译】ASP.NET MVC深度接触:ASP.NET MVC请求生命周期
    水木年华亲笔签名《ASP.NET第一步》等你来拿!!
    《C#与.NET 3.0高级程序设计(特别版)》横空出世
    是什么让你萌发了跳槽的念头?
    (原创)无废话C#设计模式之十八:Command
    (原创)无废话C#设计模式之十六:State
    (原创)无废话C#设计模式之二十:Mediator
    推荐文章索引
    技术图书非常难写
    【翻译】创建IQUERYABLE提供器系列文章
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/12868590.html
Copyright © 2011-2022 走看看