国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

萌新誤入vue-loader洞穴 -- sourcemap

Atom / 571人閱讀

摘要:今天的主線任務是,稍微了解下的這里簡單記錄下打怪經歷故事背景大祭司布魯梅爾,跟玩家說在杰羅瓦鎮的西北方有一個迷宮,里面有個被關閉了年的魔物,我們需要把這個魔物干掉,正好以此來測試下玩家是否具備開啟者的資格,也就是戰斗系轉職資格。

今天的主線任務是,稍微了解下vue-loader的sourcemap

這里簡單記錄下打怪經歷

故事背景

大祭司布魯梅爾,跟玩家說在杰羅瓦鎮的西北方有一個迷宮,里面有個被關閉了300年的魔物,我們需要把這個魔物干掉,正好以此來測試下玩家是否具備"開啟者"的資格,也就是戰斗系轉職資格。

于是作為勇士的我來到了杰村,獲取鑰匙

任務之前,先說一下,有不少法蘭城的勇士,并不喜歡它,有人說它違反了webpack自定義loader的精神,不支持inlineTemplate(具體這個inlineTemplate是什么鬼?)...

引自https://webpack.github.io/doc...

do only a single task

Loaders can be chained. Create loaders for every step, instead of a loader that does everything at once.

This also means they should not convert to JavaScript if not necessary.

Example: Render HTML from a template file by applying the query parameters
I could write a loader that compiles the template from source, execute it and return a module that exports a string containing the HTML code. This is bad.

作為萌新的我,并不知道vue-loader發生了什么了,只能說一臉蒙逼

但是我內心其實覺得vue-loader作為一個vue配套的工具,還是挺不錯的

懷揣這樣的心情,就來到了門口

二話不說,正式開干

怎么說呢,還是先了解下vue-loader的作用,它可以transform以vue結尾的文件,從而達到一些目的,比如單文件component, hot reload, scope css...

項目結構

這里要了解的sourcemap,都在parser.js文件中

source code分析

引入的外部模塊

var compiler = require("vue-template-compiler")
var cache = require("lru-cache")(100)
var hash = require("hash-sum")
var SourceMapGenerator = require("source-map").SourceMapGenerator

lru-cache,lru緩存,vue1.0內部也用的

hash-sum,其簡介為Blazing fast unique hash generator,用于生成hash

soruce-map,一個我們生成sourcemap主要的依賴庫,這里用的其屬性為SourceMapGenerator的類

vue-template-compiler,模塊發現是vue內部的代碼,為src/entries/web-compiler.js文件,這個模塊是由vue的build/build.js,使用rollup生成的packager,哦? 少年好像又學到了什么。具體vue-template-compiler搞了什么,暫時不管,先標個紅

generateSourceMap函數

function generateSourceMap (filename, source, generated) {
  var map = new SourceMapGenerator()
  map.setSourceContent(filename, source)
  generated.split(splitRE).forEach((line, index) => {
    if (!emptyRE.test(line)) {
      map.addMapping({
        source: filename,
        original: {
          line: index + 1,
          column: 0
        },
        generated: {
          line: index + 1,
          column: 0
        }
      })
    }
  })
  return map.toJSON()
}

判斷空行的目的是,這樣的話,那些空白行就不會生成map,減少map體積

chrome調試的時候,那些空白行也是灰的,沒必要打斷點嘛

然后,那個換行正則也是很有意思,外服的玩家討論了一番,https://github.com/webpack/we...
結論就是g這樣的flag,js容易出問題的,比如你可以在控制臺里感受下:

var r = /
/g;
console.log(r.test("
")); // => true
console.log(r.test("
")); // => false

解決是,要嗎將正則的屬性lastIndex = 0,要嗎將g去掉

導出函數

module.exports = function (content, filename, needMap) {
  var cacheKey = hash(filename + content)
  // source-map cache busting for hot-reloadded modules
  var filenameWithHash = filename + "?" + cacheKey
  var output = cache.get(cacheKey)
  if (output) return output
  output = compiler.parseComponent(content, { pad: true })
  if (needMap) {
    if (output.script && !output.script.src) {
      output.script.map = generateSourceMap(
        filenameWithHash,
        content,
        output.script.content
      )
    }
    if (output.styles) {
      output.styles.forEach(style => {
        if (!style.src) {
          style.map = generateSourceMap(
            filenameWithHash,
            content,
            style.content
          )
        }
      })
    }
  }
  cache.set(cacheKey, output)
  return output
}

任務途中,突遇掉線,果然很魔力

掉線回城,東門醫院補血,繼續任務

這里舉個例子,然后理解下
index.html

src/index.js

const Vue = require("vue")
const Hello = require("./Hello.vue")

new Vue({
  el: "#app",
  components: {
    Hello: Hello
  },
  render: function(h) {
    return h(
      "Hello"
    )
  }
})

src/Hello.vue





然后以此例來分析下,

3個參數

content: Hello.vue中的文件內容

filename: Hello.vue

needMap: webpack配置中如果dev-tools使用了"source-map"... 則為true

調用compiler.parseComponent(content, { pad: true }),會解析成下面的格式,
稍微注意style是一個數組的形式,即可以有多個style標簽

然后這些標簽其實可以有src屬性,表示引入外部對應的文件,比如這里判斷了!output.script.src

{ 
  template: { 
    type: "template",
    content: "
hello
", start: 10, end: 65 }, script: { type: "script", content: "http:// // // // // // module.exports = { created() { console.log("hello .vue file") } } ", start: 86, end: 161 }, styles: [ { type: "style", content: " .hello { font-size: 12px; } ", start: 186, scoped: true, end: 217 } ], customBlocks: [] }
戰斗結束


ok,沒怎么費血瓶,順利獲取重要道具:大地翼龍的鱗片1個,下一層繼續出發

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86666.html

相關文章

  • 如何創建一個webpack loader

    摘要:在目前的開源市場,前端架構中最火熱的項目非莫屬了。在使用的過程中,我們會用到各式各樣的,毫無疑問,因為機制的存在讓擁有了無限的可能性,讓幾乎可以容納一切前端需要的資源。 在目前的開源市場,前端架構中最火熱的項目非webpack莫屬了。在使用webpack的過程中,我們會用到各式各樣的loader,毫無疑問,因為loader機制的存在讓webpack擁有了無限的可能性,讓webpack幾...

    April 評論0 收藏0
  • vue-cli解析

    摘要:在中,設置了一些配置,代碼如下通過它的注釋,我們可以理解它在中配置了靜態路徑本地服務器配置項等參數。下面還有一個的對象,它是在本地服務器啟動時,打包的一些配置,代碼如下其中包括模版文件的修改,打包完目錄之后的一些路徑設置,壓縮等。 前言 這段時間,算是空出手來寫幾篇文章了。由于很久都沒有時間整理現在所用的東西了,所以,接下來會慢慢整理出一些文檔來記錄前段時間的工作和生活。 這篇文章的主...

    KunMinX 評論0 收藏0
  • vue-loader 源碼解析系列之 selector

    摘要:當前正在處理的節點,以及該節點的和等信息。源碼解析之一整體分析源碼解析之三寫作中源碼解析之四寫作中作者博客作者作者微博 筆者系 vue-loader 貢獻者之一(#16) 前言 vue-loader 源碼解析系列之一,閱讀該文章之前,請大家首先參考大綱 vue-loader 源碼解析系列之 整體分析 selector 做了什么 const path = require(path) co...

    miqt 評論0 收藏0
  • TypeScript和vuejs 搭建webpack,初次體驗

    摘要:決定改開發好,也好,二者結合實踐一下,網上一搜,剛好有。下面我把所有過程寫下,如有問題可以再文后留言,我詳解一下。 決定改TypeScript開發TypeScript好,vuejs也好,二者結合實踐一下,網上一搜:https://github.com/Microsoft/...,剛好有。以后就用TypeScript搞了。下面我把所有過程寫下,如有問題可以再文后留言,我詳解一下。或者加我...

    shengguo 評論0 收藏0
  • vue-cli webpack配置分析

    相信vue使用者對vue-cli都不會陌生,甚至可以說,很熟悉了,但對其webpack的配置可能知之甚少吧。 過完年回來后,我接手了公司的新項目。新項目是一個spa。很自然,我就想到了vue-cli腳手架了,當時研究一下它的webpack配置。于是,就有了其他的內容。 今天這篇文章,是在原來的基礎上,增加了一些新版本的內容,但實質上變化不大。 說明 此倉庫為vue-cli webpack的配置分析...

    suemi 評論0 收藏0

發表評論

0條評論

Atom

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<