麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

requirejs + vue 項目搭建詳解

2019-11-19 16:19:26
字體:
供稿:網(wǎng)友

以前都是支持 司徒正美 的,畢竟咱們也是跟著 司徒正美 一起走進(jìn)了前端的世界。所以一般MVVM都是用avalon的,當(dāng)然也是考慮到項目需要支持IE6,7,8的考慮。當(dāng)然在用的時候也有一些小坑和bug,都處理了。今年正美正好升級avalon2.0,加入虛擬dom的時候,不穩(wěn)定了,就考試尋找其他的mvvm框架。

看了比較流行的一些框架,最后選擇了vue。選擇他的原因是 文檔比較全,而且還有中文的(你懂的),生態(tài)圈比較好,有vux, vue-loader, vue-router ,組件化設(shè)計的也很好。

項目搭建的時候主要還是通過requirejs進(jìn)行js模塊加載(還沒接觸webpack,以前都是avalon+requirejs,習(xí)慣性思維了,下面就寫寫心路歷程吧)

方案1,考慮能不能通過寫個 requirejs 插件進(jìn)行vue組件文件的加載

失敗,主要是vue組件文件有template,script,style標(biāo)簽標(biāo)簽,主要通過requirejs,讀取vue文件string文件進(jìn)行正則分析在轉(zhuǎn)換js, 有點舍近求遠(yuǎn)的方法,而且這種方式只能同域名ajax請求

方案2,通過編寫gulp插件,將vue文件轉(zhuǎn)換為可以通過requirejs加載的js文件。

這個方案是可行的,只是template,script,style信息,需要通過正則匹配,在動態(tài)載入到當(dāng)前文檔中,只是有些公用方法頻繁調(diào)用。

所以加入了vueComment文件,把動態(tài)加入的方法整理在一起

define(['Vue'], function (Vue) {  Vue.appendHTML = function (text) {    document.body.insertAdjacentHTML('beforeEnd', text);  };  var style;  var doc = document;  Vue.appendCSS = function (text) {    text = text + " ";    if (!style) {      var head = doc.getElementsByTagName("head")[0];       var elms = head.getElementsByTagName("style");       if (elms.length == 0) {        if (doc.createStyleSheet) {          doc.createStyleSheet();         } else {           var tmp = doc.createElement('style');          tmp.setAttribute("type", "text/css");           head.appendChild(tmp);         }        elms[0].setAttribute("media", "screen");       }       style = elms[0];    }    if (style.styleSheet) {      style.styleSheet.cssText += text;     } else if(doc.getBoxObjectFor) {       style.innerHTML += text;    } else {       style.appendChild(doc.createTextNode(text))     }   };  });

gulp-vue nodejs主要代碼如下,通過文件名,來確定組件名字

var through = require('through2');var gutil = require('gulp-util');var regTpl = /<template>([/s/S]+?)<//template>/;var regStyle = /<style>([/s/S]+?)<//style>/; var regJs = /<script>([/s/S]+?)<//script>/; var reg = [/'/g, //n/g, /([^//]+)/.vue$/];var vueWrite = function (file, str) {  var match = file.path.match(reg[2]);  var id = "vue-tpl-" + match[1];  var appendJs = "";  var res = "";  str = str.replace(regTpl, function (t, h) {    appendJs += "/tVue.appendHTML(/n'<template id=/"" + id + "/">" + h.replace(reg[0], "http://'").replace(reg[1], "http:///n") + "<//template>');/n";    return "";  }).replace(regStyle, function (t, h) {    appendJs += "/tVue.appendCSS(/n'" + h.replace(reg[0], "http://'").trim().replace(reg[1], "http:///n") + "');/n"    return "";  }).replace(regJs, function (t, h) {    res = "define(function (require) {/n/trequire('VueCommon'); /n/tvar Vue = require('Vue');/n/tvar exports;/n" + appendJs + h + ";/n/texports.template = '#" + id + "';/n/texports = Vue.extend(exports);/n/tVue.component('" + match[1] + "', exports);/n/treturn exports;/n});"    return ;  })  return res;};module.exports = function(opt){ function run (file, encoding, callback) {  if (file.isNull()) {   return callback(null, file);  }  if (file.isStream()) {   return callback(new gutil.PluginError('gulp-vue', 'doesn/'t support Streams'));  }  file.contents = new Buffer(vueWrite(file, file.contents.toString()));  file.path = file.path + '.js';  callback(null, file); } return through.obj(run);}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产日韩在线观看一区 | 久久精品中文字幕一区 | 一区二区三区视频在线观看 | 一级毛片真人免费播放视频 | 亚洲网在线 | 一级黄色在线观看 | 久久精品2019中文字幕 | 亚洲一区免费观看 | 日本黄色一级视频 | 嫩嫩的freehdxxx | 羞羞的视频免费在线观看 | 美女视频黄a视频免费全过程 | 天天鲁在线视频免费观看 | 日本黄色一级视频 | 欧美国产免费 | 精品国产高清一区二区三区 | 久久久资源网 | wwwxxx视频 | 蜜桃麻豆视频 | 国产精品呻吟 | 亚洲一区二区 | 一级成人欧美一区在线观看 | 欧美精品毛片 | 一区二区三区四区高清视频 | 91在线精品亚洲一区二区 | 在线视频观看一区二区 | 免费国产成人高清在线看软件 | 久久国产精品一区 | 欧美精品一区自拍a毛片在线视频 | 亚洲国产色婷婷 | 欧美一级毛片大片免费播放 | 精品无码一区在线观看 | 国产精品资源手机在线播放 | 福利在线免费 | 一区二区三区在线观看国产 | 成人毛片视频在线播放 | 成人福利电影在线观看 | 欧美18—19sex性护士中国 | 成人在线免费观看视频 | 日韩三区视频 | 国产a级久久 |