vue項目遷移rem轉(zhuǎn)px

故事背景:
vue H5老項目通過 js文件監(jiān)聽body變化動態(tài)設(shè)置跟字體大小, 新項目通過npm插件 amfe-flexible && postcss-pxtorem 做的適配, 新項目開發(fā)一部分后需要將老項目部分模塊遷移進入老項目發(fā)現(xiàn)出現(xiàn)布局錯亂現(xiàn)象, 分析原因是樣式單位導(dǎo)致的(老項目 rem, 新項目 px),解決方法只能是替換老項目像素單位, 故寫了下面 node 腳本.

① node ${此文件名}
② 輸入需要轉(zhuǎn)化的文件或文件夾相對根目錄絕對路勁

const fs = require('fs')
const readline = require('readline')
const path = require('path')

const isFile = stats => stats.isFile()
const isDir = stats => stats.isDirectory()
const accMul = (arg1, arg2) => {
  var m = 0, s1 = arg1.toString(), s2 = arg2.toString()
  try {
    m += s1.split('.')[1].length
  } catch (e) {}
  try {
    m += s2.split('.')[1].length
  } catch (e) {}
  return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
}

const scan = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})

const getTargetContent = content => {
  return content.replace(/(\<style[\S\s]*?\>)([\S\s]*?)(\<\/style\>)/g, (_, $1, $2, $3) => {
    return `${$1}${$2.replace(/((-?\.?\d+)(\.\d+)?)rem/g, (_, str) => {
      return `${accMul(str, 50)}px`
    })}${$3}`
  })
}

const remToPx = path => {
  const content = fs.readFileSync(path, 'utf-8')
  const str = getTargetContent(content)
  fs.writeFileSync(path, str)
}

const fileTransform = (filePath) => {
  const stat = fs.statSync(filePath)
  if (isFile(stat)) {
    remToPx(filePath)
    return
  }
  //根據(jù)文件路徑讀取文件伟骨,返回文件列表
  fs.readdir(`${__dirname}${filePath}`, (err, files) => {
    if (err) return
    //遍歷讀取到的文件列表
    files.forEach(filename => {
      //獲取當(dāng)前文件的絕對路徑
      const filedir = path.join(filePath, filename)
      //根據(jù)文件路徑獲取文件信息垮庐,返回一個fs.Stats對象
      fs.stat(filedir, (eror, stats) => {
        if (eror) {
          console.warn('獲取文件stats失敗')
          return
        }
        if (isFile(stats)) {
          remToPx(`${filePath}/${filename}`)
        }
        if (isDir(stats)) {
          fileTransform(filedir)
        }
      })
    })
  })
}

scan.question('請輸入需要轉(zhuǎn)化的文件夾或文件(必須相對項目根路徑):', filePath => {
  const path = `${filePath.startsWith('/') ? filePath : `/${filePath}`}`
  fileTransform(path)
  scan.close()
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屿岂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坏为,更是在濱河造成了極大的恐慌究驴,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀伏,死亡現(xiàn)場離奇詭異洒忧,居然都是意外死亡,警方通過查閱死者的電腦和手機够颠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門熙侍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人履磨,你說我怎么就攤上這事蛉抓。” “怎么了剃诅?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵巷送,是天一觀的道長。 經(jīng)常有香客問我矛辕,道長惩系,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任如筛,我火速辦了婚禮,結(jié)果婚禮上抒抬,老公的妹妹穿的比我還像新娘杨刨。我一直安慰自己,他們只是感情好擦剑,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布妖胀。 她就那樣靜靜地躺著,像睡著了一般惠勒。 火紅的嫁衣襯著肌膚如雪赚抡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天纠屋,我揣著相機與錄音涂臣,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛赁遗,可吹牛的內(nèi)容都是我干的署辉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岩四,長吁一口氣:“原來是場噩夢啊……” “哼哭尝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖煌,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤材鹦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耕姊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桶唐,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年箩做,在試婚紗的時候發(fā)現(xiàn)自己被綠了莽红。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡邦邦,死狀恐怖安吁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燃辖,我是刑警寧澤鬼店,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站黔龟,受9級特大地震影響妇智,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氏身,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一巍棱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛋欣,春花似錦航徙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尚猿,卻和暖如春窝稿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凿掂。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工伴榔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓潮梯,卻偏偏與公主長得像骗灶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秉馏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容