整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          上傳圖片到阿里云OSS

          上傳圖片到阿里云OSS

          傳、預(yù)覽、下載圖片是app常用的功能之一,一般的做法是建立一個(gè)圖片存儲(chǔ)服務(wù)器,再開(kāi)發(fā)一個(gè)接收前端上傳文件的后端服務(wù),接收到前端上傳的圖片文件,然后再調(diào)用存儲(chǔ)服務(wù)器的接口完成圖片文件的存儲(chǔ)。

          現(xiàn)在阿里云提供了對(duì)象存儲(chǔ)云服務(wù)(OSS),非常方便APP直接將圖片等文件上傳上去,并提供了多種瀏覽、下載的方式,不僅操作簡(jiǎn)單、而且效率高、速度快,本文介紹三種使用方式,希望能夠讓工程師少走彎路。

          傳統(tǒng)模式

          這種方式只是把OSS作為文件存儲(chǔ)體替代了自建存儲(chǔ)器,上傳邏輯和路徑還是和傳統(tǒng)的方式一致,后端服務(wù)給前端提供上傳接口,在收到前端上傳的文件后,再調(diào)用阿里云的OSS SDK的API將文件上傳到阿里云的OSS存儲(chǔ)桶中。

          上傳流程

          詳細(xì)說(shuō)明及相關(guān)代碼請(qǐng)參考《云平臺(tái)對(duì)象存儲(chǔ)OSS》

          直接表單方式

          這種方式更加的便捷、快速,無(wú)需開(kāi)發(fā)接收后端服務(wù),而是前端直接將文件上傳到OSS,這種方式就要求前端按照約定的參數(shù)訪問(wèn)OSS API,為了安全起見(jiàn)要按照阿里云SDK的方式生成相應(yīng)的簽名并提供給前端。

          FORM表單直接上傳流程

          這里要求提前生成簽名串,生成算法如下:

          package aliyun;
          
          import aliyun.pojo.ResultData;
          import aliyun.pojo.SignatureData;
          import com.alibaba.fastjson.JSONObject;
          import org.apache.commons.codec.binary.Base64;
          
          public class Controller {
              private final static String POLICY="{\"expiration\":\"2025-12-31T23:59:59Z\",\"conditions\":[[\"content-length-range\",0,104857600]]}";
              private String accessKeySecret=System.getenv("ACCESS_SECRET_CODE");
          
              public String signatureCode(int times) throws Exception {
                  ResultData resultData=new ResultData();
          
                  //約束規(guī)則
                  String encodePolicy=new String(Base64.encodeBase64(POLICY.getBytes()));
                  // 生成簽名。
                  String signatureCom=com.aliyun.oss.common.auth.ServiceSignature.create().computeSignature(accessKeySecret, encodePolicy);
          
                  SignatureData signatureData=new SignatureData(encodePolicy,signatureCom);
                  resultData.setData(signatureData);
          
                  return JSONObject.toJSONString(resultData);
              }
          }

          其中:POLICY定義了上傳有效時(shí)間和文件大小約束,簽名要用到阿里云賬號(hào)的Access Key Secret。這里的簽名是有時(shí)效性的,有效期內(nèi)不會(huì)改變,如果對(duì)安全要求很高,可以將該簽名過(guò)程作為服務(wù)發(fā)布,讓前端每次在上傳的時(shí)候調(diào)用服務(wù)獲取實(shí)時(shí)的簽名數(shù)據(jù)。

          前端form表單的構(gòu)成如下:

          <div id="upload">
              <form  action="http://mybucket.oss-cn-beijing.aliyuncs.com" method="post" enctype="multipart/form-data">
                  <p>阿里云AccessKeyID:<input type="text" name="OSSAccessKeyId" value="LTAI8N5***XX8cr"></p>
                  <p>約束規(guī)則base64:<input type="text" name="policy" value='eyJleHBpcmF0aW9uI*********zMVQyMzo1OTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDBdXX0='></p>
                  <p>約束規(guī)則簽名:<input type="text" name="Signature" value="pgxE8VnN8kSJEWz*****QV7uBE="></p>
                  <p>OSS存儲(chǔ)文件名:<input type="text" name="key" value="upload/lee.jpg"></p>
                  <p>選擇上傳文件:<input name="file" type="file" id="file"></p>
                  <input name="submit" value="上傳" type="submit">
              </form>
          </div>

          其中:action是你賬號(hào)下OSS存儲(chǔ)桶的endpoint URL,OSSAccessKeyId是你賬號(hào)下的AccessKey ID,policy是對(duì)上傳規(guī)則約束的base64編碼(這里千萬(wàn)不能直接使用你定義的policy字符串,而是該字符串的字節(jié)碼的base64編碼后的結(jié)果,即由上面的計(jì)算結(jié)果提供),Signature就是對(duì)policy的簽名結(jié)果,key是存儲(chǔ)到你指定bucket的目錄和文件名。

          ajax方式

          通過(guò)這種方式可以不刷新頁(yè)面完成文件直接上傳到OSS,建議采用plupload.js插件實(shí)現(xiàn)。

          <!DOCTYPE html>
          <html>
          <head>
          	<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
          	<title>OSS web直傳</title>
          	<link rel="stylesheet" type="text/css" href="style.css"/>
          	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
          </head>
          <body>
          
          <h2>OSS web直傳---直接在JS簽名</h2>
          <ol>
          <li>基于plupload封裝 </li>
          <li>支持html5,flash,silverlight,html4 等協(xié)議上傳</li>
          <li>可以運(yùn)行在PC瀏覽器,手機(jī)瀏覽器,微信</li>
          <li>可以選擇多文件上傳</li>
          <li>顯示上傳進(jìn)度條</li>
          <li>可以控制上傳文件的大小</li>
          <li>最關(guān)鍵的是,讓你10分鐘之內(nèi)就能移植到你的系統(tǒng),實(shí)現(xiàn)以上牛逼的功能!</li>
          <li>注意一點(diǎn),bucket必須設(shè)置了Cors(Post打勾),不然沒(méi)有辦法上傳</li>
          <li>注意一點(diǎn),把upload.js 里面的host/accessid/accesskey改成您上傳所需要的信息即可</li>
          <li>此方法是直接在前端簽名,有accessid/accesskey泄漏的風(fēng)險(xiǎn), 線上生產(chǎn)請(qǐng)使用后端簽名例子<a href="https://help.aliyun.com/document_detail/oss/practice/pc_web_upload/js_php_upload.html">點(diǎn)擊查看詳細(xì)文檔</a></li>
          </ol>
          <br>
          <form name="theform">
            <input type="radio" name="myradio" value="local_name" checked=true/> 上傳文件名字保持本地文件名字
            <input type="radio" name="myradio" value="random_name" /> 上傳文件名字是隨機(jī)文件名
          <br/>
          上傳到指定目錄:<input type="text" id='dirname' placeholder="如果不填,默認(rèn)是上傳到根目錄" size=50>
          </form>
          
          <h4>您所選擇的文件列表:</h4>
          <div id="ossfile">你的瀏覽器不支持flash,Silverlight或者HTML5!</div>
          
          <br/>
          
          <div id="container">
          	<a id="selectfiles" href="javascript:void(0);" class='btn'>選擇文件</a>
          	<a id="postfiles" href="javascript:void(0);" class='btn'>開(kāi)始上傳</a>
          </div>
          
          <pre id="console"></pre>
          
          <p> </p>
          
          </body>
          <script type="text/javascript" src="lib/plupload-2.1.2/js/plupload.full.min.js"></script>
          <script type="text/javascript" src="upload.js"></script>
          </html>

          upload.js代碼如下:

          host='http://mybucket.oss-cn-beijing.aliyuncs.com';
          accessid='LTAI8N***mXX8cr';
          signature="pgxE8V******Wz1jKv7cQV7uBE=";
          policyBase64="eyJleHBpcmF0aW9uIjoiMjAyNS0xMi0zMVQyMzo1OTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDBdXX0=";
          
          g_dirname=''
          g_object_name=''
          g_object_name_type=''
          now=timestamp=Date.parse(new Date()) / 1000; 
          
          function check_object_radio() {
              var tt=document.getElementsByName('myradio');
              for (var i=0; i < tt.length ; i++ )
              {
                  if(tt[i].checked)
                  {
                      g_object_name_type=tt[i].value;
                      break;
                  }
              }
          }
          
          function get_dirname()
          {
              dir=document.getElementById("dirname").value;
              if (dir !='' && dir.indexOf('/') !=dir.length - 1)
              {
                  dir=dir + '/'
              }
              //alert(dir)
              g_dirname=dir
          }
          
          function random_string(len) {
            len=len || 32;
            var chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';   
            var maxPos=chars.length;
            var pwd='';
            for (i=0; i < len; i++) {
                pwd +=chars.charAt(Math.floor(Math.random() * maxPos));
              }
              return pwd;
          }
          
          function get_suffix(filename) {
              pos=filename.lastIndexOf('.')
              suffix=''
              if (pos !=-1) {
                  suffix=filename.substring(pos)
              }
              return suffix;
          }
          
          function calculate_object_name(filename)
          {
              if (g_object_name_type=='local_name')
              {
                  g_object_name +="${filename}"
              }
              else if (g_object_name_type=='random_name')
              {
                  suffix=get_suffix(filename)
                  g_object_name=g_dirname + random_string(10) + suffix
              }
              return ''
          }
          
          function get_uploaded_object_name(filename)
          {
              if (g_object_name_type=='local_name')
              {
                  tmp_name=g_object_name
                  tmp_name=tmp_name.replace("${filename}", filename);
                  return tmp_name
              }
              else if(g_object_name_type=='random_name')
              {
                  return g_object_name
              }
          }
          
          function set_upload_param(up, filename, ret)
          {
              g_object_name=g_dirname;
              if (filename !='') {
                  suffix=get_suffix(filename)
                  calculate_object_name(filename)
              }
              new_multipart_params={
                  'key' : g_object_name,
                  'policy': policyBase64,
                  'OSSAccessKeyId': accessid, 
                  'success_action_status' : '200', //讓服務(wù)端返回200,不然,默認(rèn)會(huì)返回204
                  'signature': signature,
              };
          
              up.setOption({
                  'url': host,
                  'multipart_params': new_multipart_params
              });
          
              up.start();
          }
          
          var uploader=new plupload.Uploader({
          	runtimes : 'html5,flash,silverlight,html4',
          	browse_button : 'selectfiles', 
          	container: document.getElementById('container'),
          	flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
          	silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
              url : 'http://oss.aliyuncs.com',
          
          	init: {
          		PostInit: function() {
          			document.getElementById('ossfile').innerHTML='';
          			document.getElementById('postfiles').onclick=function() {
                      set_upload_param(uploader, '', false);
                      return false;
          			};
          		},
          
          		FilesAdded: function(up, files) {
          			plupload.each(files, function(file) {
          				document.getElementById('ossfile').innerHTML +='<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
          				+'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
          				+'</div>';
          			});
          		},
          
          		BeforeUpload: function(up, file) {
                      check_object_radio();
                      get_dirname();
                      set_upload_param(up, file.name, true);
                  },
          
          		UploadProgress: function(up, file) {
          			var d=document.getElementById(file.id);
          			d.getElementsByTagName('b')[0].innerHTML='<span>' + file.percent + "%</span>";
                      var prog=d.getElementsByTagName('div')[0];
          			var progBar=prog.getElementsByTagName('div')[0]
          			progBar.style.width=2*file.percent+'px';
          			progBar.setAttribute('aria-valuenow', file.percent);
          		},
          
          		FileUploaded: function(up, file, info) {
                      if (info.status==200)
                      {
                          document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML='upload to oss success, object name:' + get_uploaded_object_name(file.name);
                      }
                      else
                      {
                          document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML=info.response;
                      } 
          		},
          
          		Error: function(up, err) {
          			document.getElementById('console').appendChild(document.createTextNode("\nError xml:" + err.response));
          		}
          	}
          });
          
          uploader.init();

          其中:host為OSS存儲(chǔ)桶endpoint地址、accessid為阿里云賬號(hào)ID、signature為后端生成的簽名、policyBase64為規(guī)則json串的base64編碼

          訪問(wèn)上傳的文件

          有多種方式可以查看你上傳的文件,詳細(xì)操作見(jiàn)阿里云OSS操作手冊(cè)。這里只說(shuō)明一種直接通過(guò)URL訪問(wèn)的方式。

          針對(duì)該bucket設(shè)置為開(kāi)通“靜態(tài)頁(yè)面”、權(quán)限管理設(shè)置為“公共可讀”、防盜鏈設(shè)置“referer”等安全選項(xiàng),然后就可以通過(guò)類似

          http://mybucket.oss-cn-beijing.aliyuncs.com/upload/lee

          的方式訪問(wèn)你上傳的圖片等文件了。

          管理器

          托管JavaScript庫(kù)并提供用于獲取和打包它們的工具。

          • npm - npm是JavaScript的包管理器。
          • Bower - 網(wǎng)絡(luò)包管理器。
          • component - 用于構(gòu)建更好的Web應(yīng)用程序的客戶端包管理。
          • spm - 全新的靜態(tài)包管理器。
          • jam - 使用以瀏覽器為中心且與RequireJS兼容的存儲(chǔ)庫(kù)的包管理器。
          • jspm - 無(wú)摩擦瀏覽器包管理。
          • 恩德 - 無(wú)庫(kù)圖書(shū)館。
          • volo - 從模板創(chuàng)建前端項(xiàng)目,添加依賴項(xiàng)并自動(dòng)生成項(xiàng)目。
          • Duo - 下一代軟件包管理器,融合了Component,Browserify和Go的最佳創(chuàng)意,使組織和編寫(xiě)前端代碼快速而輕松。
          • yarn - 快速,可靠,安全的依賴管理。

          加載器 (Loaders)

          • JavaScript的模塊或加載系統(tǒng)。
          • RequireJS - JavaScript的文件和模塊加載器。
          • browserify - 瀏覽器端require()node.js方式。
          • SeaJS - Web的模塊加載器。
          • HeadJS - HEAD中唯一的腳本。
          • curl - 一個(gè)小型,快速,可擴(kuò)展的模塊加載器,可處理AMD,CommonJS模塊/ 1.1,CSS,HTML /文本和舊腳本。
          • lazyload - 微小的,無(wú)依賴的異步JavaScript和CSS加載器。
          • script.js - 異步JavaScript加載器和依賴項(xiàng)管理器。
          • systemjs - 符合AMD,CJS和ES6規(guī)范的模塊加載器。
          • LodJS - 基于AMD的模塊加載器。
          • ESL - 模塊加載器瀏覽器首先,支持懶惰定義和AMD。
          • modulejs - 輕量級(jí)JavaScript模塊系統(tǒng)。

          Bundlers

          • browserify - Browserify允許您通過(guò)捆綁所有依賴項(xiàng)來(lái)在瀏覽器中(“模塊”)。
          • webpack - 為瀏覽器打包CommonJs / AMD模塊。
          • Rollup - 下一代ES6模塊捆綁器。
          • Brunch - 具有簡(jiǎn)單聲明配置的快速前端Web應(yīng)用程序構(gòu)建工具。
          • Parcel - 快速,零配置Web應(yīng)用程序捆綁器。

          測(cè)試框架

          構(gòu)架

          • mocha - 簡(jiǎn)單,靈活,有趣的node.js和瀏覽器JavaScript測(cè)試框架。
          • jasmine - DOM-less簡(jiǎn)單的JavaScript測(cè)試框架。
          • qunit - 一個(gè)易于使用的JavaScript單元測(cè)試框架。
          • jest - 無(wú)痛的JavaScript單元測(cè)試。
          • prova - 基于Tape和Browserify的節(jié)點(diǎn)和瀏覽器測(cè)試運(yùn)行器
          • DalekJS - 使用JavaScript實(shí)現(xiàn)自動(dòng)跨瀏覽器功能測(cè)試
          • Protractor - Protractor是AngularJS應(yīng)用程序的端到端測(cè)試框架。
          • tape - 用于節(jié)點(diǎn)和瀏覽器的Tap生成測(cè)試工具。
          • TestCafe - 針對(duì)現(xiàn)代Web開(kāi)發(fā)堆棧的自動(dòng)瀏覽器測(cè)試。
          • ava - 未來(lái)的JavaScript測(cè)試運(yùn)行器

          斷言

          • chai - node.js的BDD / TDD斷言框架和可以與任何測(cè)試框架配對(duì)的瀏覽器。
          • Enzyme - Enzyme是React的JavaScript測(cè)試實(shí)用程序,可以更容易地?cái)嘌裕僮骱捅闅vReact Components的輸出。
          • 反應(yīng)測(cè)試庫(kù) - 簡(jiǎn)單而完整的React DOM測(cè)試實(shí)用程序,可以鼓勵(lì)良好的測(cè)試實(shí)踐。
          • Sinon.JS - 測(cè)試JavaScript的間諜,存根和模擬。
          • expect.js - Node.JS和瀏覽器的簡(jiǎn)約BDD風(fēng)格斷言。

          覆蓋

          • istanbul - 又一個(gè)JS代碼覆蓋工具。
          • blanket - 一個(gè)簡(jiǎn)單的JavaScript代碼覆蓋庫(kù)。瀏覽器和nodejs易于安裝和使用。
          • JSCover - JSCover是一個(gè)測(cè)量JavaScript程序代碼覆蓋率的工具。

          Runner

          • phantomjs - Scriptable Headless WebKit。
          • slimerjs - 運(yùn)行Gecko的類似PhantomJS的工具。
          • casperjs - PhantomJS和SlimerJS的導(dǎo)航腳本和測(cè)試實(shí)用程序。
          • zombie - 使用node.js進(jìn)行瘋狂快速,全棧,無(wú)頭瀏覽器測(cè)試
          • totoro - 一個(gè)簡(jiǎn)單而穩(wěn)定的跨瀏覽器測(cè)試工具。
          • karma - JavaScript的壯觀測(cè)試賽跑者。
          • nightwatch - 基于node.js和selenium webdriver的UI自動(dòng)化測(cè)試框架。
          • nightwatch - UI - JavaScript的下一代代碼測(cè)試堆棧。
          • yolpo - 瀏覽器中的語(yǔ)句JavaScript解釋器。

          質(zhì)量檢查工具

          • prettier - Prettier是一個(gè)自以為是的代碼格式化程序。
          • JSHint - JSHint是一個(gè)有助于檢測(cè)JavaScript代碼中的錯(cuò)誤和潛在問(wèn)題的工具。
          • jscs - JavaScript代碼樣式檢查器。
          • jsfmt - 用于格式化,搜索和重寫(xiě)JavaScript。
          • jsinspect - 檢測(cè)復(fù)制粘貼和結(jié)構(gòu)相似的代碼。
          • buddy.js - JavaScript的幻數(shù)檢測(cè)。
          • ESLint - 一種完全可插入的工具,用于識(shí)別和報(bào)告JavaScript中的模式。
          • JSLint - 高標(biāo)準(zhǔn),嚴(yán)格和固定的代碼質(zhì)量工具,旨在保持語(yǔ)言的優(yōu)秀部分。
          • JavaScript標(biāo)準(zhǔn)樣式 - 意見(jiàn),無(wú)配置樣式指南,樣式檢查器和格式化程序

          MVC框架和庫(kù)

          • angular.js - 針對(duì)網(wǎng)絡(luò)應(yīng)用增強(qiáng)的HTML。
          • aurelia - 適用于移動(dòng),桌面和Web的JavaScript客戶端框架。
          • backbone - 為您的JS應(yīng)用程序提供模型,視圖,集合和事件的一些骨干。
          • ember.js - 用于創(chuàng)建雄心勃勃的Web應(yīng)用程序的JavaScript框架。
          • meteor - 一個(gè)超簡(jiǎn)單,數(shù)據(jù)庫(kù)無(wú)處不在的數(shù)據(jù)線上純javascript Web框架。
          • ractive - 下一代DOM操作。
          • vue - 用于構(gòu)建交互式界面的直觀,快速和可組合的MVVM。
          • knockout - Knockout可以更輕松地使用JavaScript創(chuàng)建豐富的響應(yīng)式UI。
          • spine - 用于構(gòu)建JavaScript應(yīng)用程序的輕量級(jí)MVC庫(kù)。
          • espresso.js - 用于制作用戶界面的最小JavaScript庫(kù)。
          • canjs - 可以做JS,更好,更快,更容易。
          • react - 用于構(gòu)建用戶界面的庫(kù)。它具有聲明性,高效性和極其靈活性。適用于虛擬DOM。
          • hyperapp - 用于構(gòu)建前端應(yīng)用程序的1kb JavaScript庫(kù)。
          • preact - 使用相同的ES6 API快速3kb React替代方案。組件和虛擬DOM。
          • nativescript - 使用JavaScript構(gòu)建真正的原生跨平臺(tái)iOS和Android應(yīng)用程序。
          • react-native - 使用React構(gòu)建本機(jī)應(yīng)用程序的框架。
          • riot - 類似React的庫(kù),但體積非常小。
          • thorax - 加強(qiáng)你的骨干。
          • chaplin - 使用Backbone.js庫(kù)的JavaScript應(yīng)用程序的體系結(jié)構(gòu)。
          • marionette - Backbone.js的復(fù)合應(yīng)用程序庫(kù),旨在簡(jiǎn)化大型JavaScript應(yīng)用程序的構(gòu)建。
          • ripple - 構(gòu)建反應(yīng)性視圖的微小基礎(chǔ)。
          • rivets - 輕量級(jí)和強(qiáng)大的數(shù)據(jù)綁定+模板解決方案。
          • derby - MVC框架,可以輕松編寫(xiě)在Node.js和瀏覽器中運(yùn)行的實(shí)時(shí)協(xié)作應(yīng)用程序。
          • derby-awesome - 一系列令人敬畏的德比組件
          • way.js - 簡(jiǎn)單,輕量,持久的雙向數(shù)據(jù)綁定。
          • mithril.js - Mithril是一個(gè)客戶端MVC框架(輕量級(jí),健壯,快速)。
          • jsblocks - jsblocks是更好的MV-ish框架。
          • LiquidLava - 用于構(gòu)建用戶界面的透明MVC框架。
          • feathers - 明天應(yīng)用程序的極簡(jiǎn)主義實(shí)時(shí)JavaScript框架。
          • Keo - 具有Shadow DOM支持的功能無(wú)狀態(tài)React組件。
          • atvjs - 使用純JavaScript快速開(kāi)發(fā)Apple TV應(yīng)用程序

          基于Node的CMS框架

          • KeystoneJS - 功能強(qiáng)大的CMS和Web應(yīng)用程序框架。
          • Reaction Commerce - 反應(yīng)式CMS,實(shí)時(shí)架構(gòu)和設(shè)計(jì)。
          • Ghost - 簡(jiǎn)單,強(qiáng)大的發(fā)布平臺(tái)。
          • Apostrophe - CMS內(nèi)容編輯和基本服務(wù)。
          • We.js - 實(shí)時(shí)應(yīng)用程序,網(wǎng)站或博客的框架。
          • Hatch.js - 具有社交功能的CMS平臺(tái)。
          • TaracotJS - 基于Node.js的快速簡(jiǎn)約CMS。
          • Nodizecms - 適用于CoffeeScript愛(ài)好者的CMS。
          • Cody - CMS與WSYWYG編輯器。
          • PencilBlue - CMS和博客平臺(tái)。

          模板引擎

          模板引擎允許您執(zhí)行字符串插值。

          • mustache.js - JavaScript中{{mustaches}}的最小模板。
          • handlebars.js - Mustache模板語(yǔ)言的擴(kuò)展。
          • nunjucks - 來(lái)自Mozilla的JavaScript豐富而強(qiáng)大的模板語(yǔ)言。
          • hogan.js - Mustache模板語(yǔ)言的編譯器。
          • doT - nodejs和瀏覽器的最快+簡(jiǎn)潔的JavaScript模板引擎。
          • dustjs - 瀏覽器和node.js的異步模板。
          • eco - 嵌入式CoffeeScript模板。
          • JavaScript-Templates - <1KB輕量級(jí),快速且功能強(qiáng)大的JavaScript模板引擎,具有零依賴性。
          • t.js - 一個(gè)小的JavaScript模板框架,約400字節(jié)gzip壓縮。
          • Pug - 用于nodejs的強(qiáng)大,優(yōu)雅,功能豐富的模板引擎。 (以前稱為玉)
          • EJS - 有效的JavaScript模板。
          • xtemplate - 節(jié)點(diǎn)和瀏覽器的可擴(kuò)展模板引擎庫(kù)
          • marko - 一個(gè)快速,輕量級(jí),基于HTML的模板引擎,用于Node.js和瀏覽器,具有異步,流,自定義標(biāo)簽和CommonJS模塊作為編譯輸出。
          • swig - 一個(gè)簡(jiǎn)單,功能強(qiáng)大且可擴(kuò)展的Node.js和基于瀏覽器的JavaScript模板引擎。

          數(shù)據(jù)可視化

          用于Web的數(shù)據(jù)可視化工具。

          • d3 - 用于HTML和SVG的JavaScript可視化庫(kù)。
          • metrics-graphics - 針對(duì)簡(jiǎn)潔,有原則的數(shù)據(jù)圖形和布局進(jìn)行優(yōu)化的庫(kù)。
          • pykcharts.js - 精心設(shè)計(jì)的d3.js圖表??,沒(méi)有d3.js的復(fù)雜性。
          • three.js - JavaScript 3D庫(kù)。
          • Chart.js - 使用標(biāo)記的簡(jiǎn)單HTML5圖表。
          • paper.js - 瑞士軍刀矢量圖形腳本 - 使用HTML5 Canvas移植到JavaScript和瀏覽器的Scriptographer。
          • fabric.js - JavaScript Canvas Library,SVG-to-Canvas(&canvas-to-SVG)Parser。
          • peity - 漸進(jìn)式條形圖,折線圖和餅圖。
          • raphael - JavaScript矢量庫(kù)。
          • echarts - 企業(yè)圖表。
          • vis - 基于瀏覽器的動(dòng)態(tài)可視化庫(kù)。
          • two.js - 用于網(wǎng)絡(luò)的渲染器不可知的二維繪圖api。
          • g.raphael - Rapha?l的圖表。
          • sigma.js - 專用于圖形繪制的JavaScript庫(kù)。
          • arbor - 使用Web worker和jQuery的圖形可視化庫(kù)。
          • cubism - 用于可視化時(shí)間序列的D3插件。
          • dc.js - 多維圖表,可與使用d3.js渲染的交叉過(guò)濾器本機(jī)工作
          • vega - 可視化語(yǔ)法。
          • processing.js - Processing.js使您的數(shù)據(jù)可視化使用Web標(biāo)準(zhǔn)并且沒(méi)有任何插件。
          • envisionjs - 動(dòng)態(tài)HTML5可視化。
          • rickshaw - 用于創(chuàng)建交互式實(shí)時(shí)圖的JavaScript工具包。
          • flot - jQuery的迷人JavaScript圖表。
          • morris.js - 漂亮的時(shí)間序列線圖。
          • nvd3 - 為d3.js構(gòu)建可重用的圖表和圖表組件。
          • svg.js - 一個(gè)用于操作和動(dòng)畫(huà)SVG的輕量級(jí)庫(kù)。
          • heatmap.js - 基于HTML5畫(huà)布的熱圖的JavaScript庫(kù)。
          • jquery.sparkline - jQuery JavaScript庫(kù)的插件,可直接在瀏覽器中生成小的迷你圖表。
          • xCharts - 基于D3的庫(kù),用于構(gòu)建自定義圖表和圖形。
          • trianglify - 低聚風(fēng)格背景發(fā)生器與d3.js.
          • d3-cloud - 在JavaScript中創(chuàng)建單詞云。
          • d4 - D3的友好可重用圖表DSL。
          • dimple.js - 由d3支持的簡(jiǎn)單業(yè)務(wù)分析圖表。
          • chartist-js - 簡(jiǎn)單的響應(yīng)式圖表。
          • epoch - 通用實(shí)時(shí)圖表庫(kù)。
          • c3 - 基于D3的可重用圖表庫(kù)。
          • BabylonJS - 使用HTML 5和WebGL構(gòu)建3D游戲的框架。
          • recharts - 使用React和D3構(gòu)建的重新定義的圖表庫(kù)。
          • GraphicsJS - 一個(gè)輕量級(jí)JavaScript圖形庫(kù),具有基于SVG / VML技術(shù)的直觀API。
          • mxGraph - 圖表庫(kù),可以快速創(chuàng)建交互式圖形和圖表應(yīng)用程序,這些應(yīng)用程序可以在其供應(yīng)商支持的任何主要瀏覽器中本機(jī)運(yùn)行。
          • 還有一些很棒的商業(yè)庫(kù),如amchart,anychart,plotly和highchart。

          時(shí)間線

          • TimelineJS v3 - 用JavaScript構(gòu)建的講故事時(shí)間軸。
          • timesheet.js - 簡(jiǎn)單HTML5和CSS3時(shí)間表的JavaScript庫(kù)。

          電子表格

          • HANDSONTABLE - Handsontable是面向開(kāi)發(fā)人員的JavaScript / HTML5電子表格庫(kù)

          編輯器

          • ace - Ace(Ajax.org Cloud9編輯器)。
          • CodeMirror - 瀏覽器內(nèi)代碼編輯器。
          • esprima - 用于多功能分析的ECMAScript解析基礎(chǔ)設(shè)施。
          • quill - 帶有API的跨瀏覽器的富文本編輯器。
          • medium-editor - Medium.com WYSIWYG編輯器克隆。
          • pen - 享受現(xiàn)場(chǎng)編輯(+Markdown)。
          • jquery-notebook - 一個(gè)簡(jiǎn)單,干凈,優(yōu)雅的文本編輯器。靈感來(lái)自Medium的精彩。
          • bootstrap-wysiwyg - 與Tiny bootstrap兼容的WYSIWYG富文本編輯器。
          • ckeditor-releases - 適合所有人的最佳網(wǎng)絡(luò)文本編輯器。
          • editor - Markdown編輯。仍處于發(fā)展階段。
          • EpicEditor - 一個(gè)可嵌入的JavaScript Markdown編輯器,具有分屏全屏編輯,實(shí)時(shí)預(yù)覽,自動(dòng)草稿保存,離線支持等功能。
          • jsoneditor - 一個(gè)基于Web的工具,用于查看,編輯和格式化JSON。
          • vim.js - 帶有持久性?/ .vimrc的Vim的JavaScript端口。
          • Squire - HTML5富文本編輯器。
          • TinyMCE - JavaScript Rich Text編輯器。
          • trix - 用于日常寫(xiě)作的富文本編輯器。通過(guò)Basecamp。
          • Trumbowyg - 一個(gè)輕量級(jí)且令人驚嘆的WYSIWYG JavaScript編輯器。
          • Draft.js - 用于構(gòu)建文本編輯器的React框架。
          • bootstrap-wysihtml5 - 簡(jiǎn)單,漂亮的所見(jiàn)即所得的編輯器
          • wysihtml5 - 基于HTML5的開(kāi)源富文本編輯器和漸進(jìn)增強(qiáng)方法。使用復(fù)雜的安全性概念,旨在通過(guò)防止不可維護(hù)的標(biāo)簽湯和內(nèi)聯(lián)樣式來(lái)生成完全有效的HTML5標(biāo)記。
          • raptor-editor - Raptor,HTML5 WYSIWYG內(nèi)容編輯器!
          • popline - Popline是一個(gè)HTML5富文本編輯器工具欄。

          文檔

          • DevDocs是一個(gè)一體化的API文檔閱讀器,具有快速,有條理和一致的界面。
          • dexy是一種自由形式的文化文檔工具,用于編寫(xiě)包含代碼的任何類型的技術(shù)文檔。
          • docco是一個(gè)快速,骯臟,百行,文化編程風(fēng)格的文檔生成器。
          • styledocco從樣式表生成文檔和樣式指南文檔。
          • Ronn制作手冊(cè)。它將簡(jiǎn)單的,人類可讀的文本文件轉(zhuǎn)換為roff用于終端顯示,也轉(zhuǎn)換為HTML用于Web。
          • dox是一個(gè)用節(jié)點(diǎn)編寫(xiě)的JavaScript文檔生成器。 Dox不再為您的文檔生成固定的結(jié)構(gòu)或樣式,它只是為您提供JSON表示,允許您使用markdown和JSDoc樣式的標(biāo)記。
          • jsdox是一個(gè)JSDoc3到Markdown文檔生成器。
          • ESDoc是一個(gè)很好的JavaScript文檔生成器。
          • YUIDoc是一個(gè)Node.js應(yīng)用程序,它使用類似于Javadoc和Doxygen等工具的語(yǔ)法,從源代碼中的注釋生成API文檔。
          • coddoc是一個(gè)jsdoc解析庫(kù)。 Coddoc的不同之處在于,它允許用戶通過(guò)使用coddoc.addTagHandler和coddoc.addCodeHandler添加標(biāo)記和代碼解析器,從而可以輕松擴(kuò)展。 coddoc還解析了在API中使用的源代碼。
          • sphinx是一款可輕松創(chuàng)建智能和精美文檔的工具
          • 使用JSDoc
          • Beautiful docs是一個(gè)基于markdown文件的文檔查看器。
          • documentation.js - 支持ES2015 +和流程注釋的API文檔生成器。
          • jsduck - 為Sencha JavaScript框架制作的API文檔生成器,但也可用于其他框架。

          文件

          用于處理文件的庫(kù)。

          • Papa Parse - 一個(gè)功能強(qiáng)大的CSV庫(kù),支持解析CSV文件/字符串并導(dǎo)出為CSV。
          • jBinary - 具有聲明性語(yǔ)法的二進(jìn)制文件的高級(jí)I / O(加載,解析,操作,序列化,保存),用于描述文件類型和數(shù)據(jù)結(jié)構(gòu)。
          • diff2html - Git diff輸出解析器和漂亮的HTML生成器。
          • jsPDF - JavaScript PDF生成。
          • PDF.js - JavaScript中的PDF閱讀器。

          函數(shù)編程

          函數(shù)式編程庫(kù),用于擴(kuò)展JavaScript的功能。

          • underscore - JavaScript的實(shí)用程序_腰帶。
          • lodash - 提供一致性,定制,性能和附加功能的實(shí)用程序庫(kù)。
          • Sugar - 用于處理本機(jī)對(duì)象的JavaScript庫(kù)。
          • lazy.js - 像下劃線,但更懶。
          • ramda - JavaScript程序員的實(shí)用函數(shù)庫(kù)。
          • mout - 模塊化JavaScript實(shí)用程序。
          • mesh - Streamable數(shù)據(jù)同步實(shí)用程序。
          • preludejs - JavaScript的硬核函數(shù)式編程。

          反應(yīng)式編程

          反應(yīng)式編程庫(kù),以擴(kuò)展JavaScript的功能。

          • RxJs - JavaScript的反應(yīng)性擴(kuò)展。
          • Bacon - 用于JavaScript的FRP(功能反應(yīng)式編程)庫(kù)。
          • Kefir - 針對(duì)JavaScript的FRP庫(kù),受到Bacon.js和RxJS的啟發(fā),專注于高性能和低內(nèi)存消耗。
          • Highland - 重新思考JavaScript實(shí)用程序帶,Highland輕松管理同步和異步代碼,僅使用標(biāo)準(zhǔn)JavaScript和類似Node的Streams。
          • Most.js - 高性能FRP庫(kù)。
          • MobX - 用于簡(jiǎn)單,可擴(kuò)展?fàn)顟B(tài)管理的TFRP庫(kù)。
          • Cycle.js - 一個(gè)功能強(qiáng)大且反應(yīng)靈敏的JavaScript庫(kù),用于更清晰的代碼。

          數(shù)據(jù)結(jié)構(gòu)

          數(shù)據(jù)結(jié)構(gòu)庫(kù)構(gòu)建更復(fù)雜的應(yīng)用程序。

          • immutable-js - 不可變數(shù)據(jù)集合,包括序列,范圍,重復(fù),映射,OrderedMap,Set和稀疏向量。
          • mori - 一個(gè)庫(kù),用于使用ClojureScript的持久數(shù)據(jù)結(jié)構(gòu),并從舒適的vanilla JavaScript中支持API。
          • 存儲(chǔ)桶 - 用JavaScript編寫(xiě)的完整,經(jīng)過(guò)全面測(cè)試和記錄的數(shù)據(jù)結(jié)構(gòu)庫(kù)。
          • hashmap - 支持任何類型密鑰的簡(jiǎn)單hashmap實(shí)現(xiàn)。

          日期

          日期庫(kù)。

          • moment - 在JavaScript中解析,驗(yàn)證,操作和顯示日期。
          • moment-timezone - 時(shí)區(qū)支持moment.js。
          • jquery-timeago - 一個(gè)jQuery插件,可以輕松支持自動(dòng)更新模糊時(shí)間戳(例如“4分鐘前”)。
          • timezone-js - 啟用時(shí)區(qū)的JavaScript Date對(duì)象。使用Olson zoneinfo文件獲取時(shí)區(qū)數(shù)據(jù)。
          • date - 人類的日期()。
          • ms.js - 微小的毫秒轉(zhuǎn)換實(shí)用程序。
          • countdown.js - 超級(jí)簡(jiǎn)單的倒計(jì)時(shí)。
          • timeago.js - 簡(jiǎn)單的庫(kù)(小于2kb)用于格式化日期與*** time ago語(yǔ)句。
          • fecha - 輕量級(jí)日期格式化和解析(~2KB)。意味著要取代moment.js的解析和格式化功能。
          • date-fns - 現(xiàn)代JavaScript日期實(shí)用程序庫(kù)。
          • map-countdown - 基于Google地圖構(gòu)建的瀏覽器倒計(jì)時(shí)

          字符串

          字符串庫(kù)。

          • voca - 終極JavaScript字符串庫(kù)
          • selecting - 允許您訪問(wèn)用戶選擇的文本的庫(kù)。
          • underscore.string - Underscore.js JavaScript庫(kù)的字符串操作擴(kuò)展。
          • string.js - 額外的JavaScript字符串方法。
          • he - 用JavaScript編寫(xiě)的強(qiáng)大的HTML實(shí)體編碼器/解碼器。
          • multiline - JavaScript中的多行字符串。
          • query-string - 解析和字符串化URL查詢字符串。
          • URI.js - JavaScript URL變異庫(kù)。
          • jsurl - 使用JavaScript進(jìn)行輕量級(jí)URL操作。
          • sprintf.js - sprintf實(shí)現(xiàn)。
          • url-pattern - 比url和其他字符串的正則表達(dá)式字符串匹配模式更容易。將字符串轉(zhuǎn)換為數(shù)據(jù)或數(shù)據(jù)為字符串。

          數(shù)字

          • Numeral-js - 用于格式化和操作數(shù)字的JavaScript庫(kù)。
          • chance.js - JavaScript中的隨機(jī)生成器助手。可以生成數(shù)字,字符串等。
          • odometer - 輕松過(guò)渡數(shù)字。
          • accounting.js - 用于數(shù)字,貨幣和貨幣格式的輕量級(jí)JavaScript庫(kù) - 完全可本地化,零依賴性。
          • money.js - 一個(gè)小的(1kb)JavaScript貨幣轉(zhuǎn)換庫(kù),用于web和nodeJS。
          • Fraction.js - JavaScript的有理數(shù)字庫(kù)。
          • Complex.js - JavaScript的復(fù)數(shù)庫(kù)。
          • Polynomial.js - JavaScript的多項(xiàng)式庫(kù)。

          存儲(chǔ)

          • store.js - 所有瀏覽器的LocalStorage包裝器,不使用cookie或flash。使用localStorage,globalStorage和userData行為。
          • localForage - 改進(jìn)的離線存儲(chǔ)。使用簡(jiǎn)單但功能強(qiáng)大的API包裝IndexedDB,WebSQL或localStorage。
          • jStorage - jStorage是一個(gè)簡(jiǎn)單的鍵/值數(shù)據(jù)庫(kù),用于在瀏覽器端存儲(chǔ)數(shù)據(jù)。
          • cross-storage - 跨域本地存儲(chǔ),具有權(quán)限。
          • basket.js - 用于使用localStorage緩存和加載腳本的腳本和資源加載器。
          • bag.js - 一個(gè)緩存腳本和資源加載器,類似于basket.js,但具有額外的k / v接口和localStorage / websql / indexedDB支持。
          • basil.js - 缺少的JavaScript智能持久層。
          • jquery-cookie - 一個(gè)簡(jiǎn)單,輕量級(jí)的jQuery插件,用于讀取,寫(xiě)入和刪除cookie。
          • js-cookie - 用于處理瀏覽器cookie的簡(jiǎn)單輕量級(jí)JavaScript API。
          • Cookie - JavaScript客戶端Cookie操作庫(kù)。
          • DB.js - 基于Promise的IndexDB Wrapper庫(kù)。
          • lawnchair.js - 簡(jiǎn)單的客戶端JSON存儲(chǔ)。
          • sql.js - 通過(guò)Emscripten編譯為JavaScript的SQLite。

          Color(顏色)

          • randomColor - JavaScript的顏色生成器。
          • chroma.js - 用于各種顏色操作的JavaScript庫(kù)。
          • color - JavaScript顏色轉(zhuǎn)換和操作庫(kù)。
          • colors - 網(wǎng)絡(luò)上顏色的更智能默認(rèn)值。
          • PleaseJS - 用于創(chuàng)建隨機(jī)賞心悅目的顏色和配色方案的JavaScript庫(kù)。
          • TinyColor - 快速,小巧的顏色處理和JavaScript轉(zhuǎn)換。
          • Vibrant.js - 從圖像中提取突出的顏色。

          I18n和L10n

          本地化(l10n)和國(guó)際化(i18n)JavaScript庫(kù)。

          • i18next - 使用JavaScript輕松實(shí)現(xiàn)國(guó)際化(i18n)。
          • polyglot - tiny i18n helper library。
          • babelfish - i18n具有人性化的API并內(nèi)置復(fù)數(shù)支持。
          • ttag - 基于ES6標(biāo)記模板和良好的舊GNU gettext的現(xiàn)代javascript i18n本地化庫(kù)。

          控制流

          • async - 節(jié)點(diǎn)和瀏覽器的異步實(shí)用程序。
          • q - 用于在JavaScript中創(chuàng)建和編寫(xiě)異步promise的工具。
          • step - 一個(gè)異步控制流庫(kù),可以輕松地逐步執(zhí)行邏輯。
          • contra - 具有功能性的異步流量控制。
          • Bluebird - 功能齊全的承諾庫(kù),專注于創(chuàng)新功能和性能。
          • when - 一個(gè)可靠,快速的Promises / A +和when()實(shí)現(xiàn),以及其他異步好東西。
          • ObjectEventTarget - 提供一個(gè)原型,為事件偵聽(tīng)器添加支持(在瀏覽器上可用的DOMElements中具有相同的EventTarget行為)。

          路由

          • director - 一個(gè)用于JavaScript的小而同構(gòu)的URL路由器。
          • page.js - 受Express路由器啟發(fā)的微客戶端路由器(~1200字節(jié))。
          • pathjs - 用于Web瀏覽器的簡(jiǎn)單輕量級(jí)路由。
          • crossroads- JavaScript路線。
          • davis.js - 使用pushState的RESTful可降級(jí)JavaScript路由。

          安全

          • DOMPurify - 用于HTML,MathML和SVG的僅限D(zhuǎn)OM,超快速,超級(jí)容忍的XSS清理程序。
          • js-xss - 使用白名單指定的配置清理不受信任的HTML(以防止XSS)。
          • xss-filters - 雅虎安全的XSS過(guò)濾器。

          日志

          • log - 帶有樣式的Console.log。
          • Conzole - 一個(gè)用JavaScript構(gòu)建的調(diào)試面板,它在頁(yè)面內(nèi)顯示的面板中包裝JavaScript本機(jī)控制臺(tái)對(duì)象方法和功能。
          • console.log-wrapper - 在任何瀏覽器中清楚地記錄到控制臺(tái)。
          • loglevel - JavaScript的最小輕量級(jí)日志記錄,添加可靠的日志級(jí)別方法來(lái)包裝任何可用的console.log方法。
          • minilog - 使用Stream-API后端的輕量級(jí)客戶端和服務(wù)器端日志記錄。
          • storyboard - 通用日志庫(kù)+ Chrome擴(kuò)展;它允許您在一個(gè)位置查看由用戶操作觸發(fā)的所有客戶端和服務(wù)器任務(wù)。

          正則表達(dá)式

          • RegEx101 - 用于JavaScript的在線正則表達(dá)式測(cè)試器和調(diào)試器。還支持Python,PHP和PCRE。
          • RegExr - 基于HTML / JS的工具,用于創(chuàng)建,測(cè)試和學(xué)習(xí)正則表達(dá)式。
          • RegExpBuilder - 使用鏈?zhǔn)椒椒▌?chuàng)建正則表達(dá)式。

          語(yǔ)音控制

          • annyang - 一個(gè)JavaScript庫(kù),用于使用語(yǔ)音識(shí)別向您的站點(diǎn)添加語(yǔ)音命令。
          • voix.js - 一個(gè)JavaScript庫(kù),用于為您的網(wǎng)站,應(yīng)用或游戲添加語(yǔ)音命令。

          API

          • axios - 基于Promise的HTTP客戶端,用于瀏覽器和node.js.
          • bottleneck- 一種強(qiáng)大的速率限制器,可以輕松控制節(jié)流。
          • oauth-signature-js - 用于節(jié)點(diǎn)和瀏覽器的JavaScript OAuth 1.0a簽名生成器。
          • amygdala - 用于JavaScript驅(qū)動(dòng)的Web應(yīng)用程序的RESTful HTTP客戶端。
          • jquery.rest - 一個(gè)jQuery插件,可以輕松使用RESTful API。
          • Rails Ranger - Ruby on Rails API的固定REST客戶端。

          流(Streaming)

          • Tailor - 前端微服務(wù)的流媒體布局服務(wù),受Facebook的BigPipe啟發(fā)。

          視覺(jué)檢測(cè)

          • tracking.js - 網(wǎng)絡(luò)上計(jì)算機(jī)視覺(jué)的現(xiàn)代方法。
          • ocrad.js - 通過(guò)Emscripten在JavaScript中進(jìn)行OCR。

          機(jī)器學(xué)習(xí)

          • ConvNetJS - JavaScript中的深度學(xué)習(xí)。在您的瀏覽器中訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(或普通的)。
          • DN2A - 數(shù)字神經(jīng)網(wǎng)絡(luò)架構(gòu)。
          • Brain.js - JavaScript中的神經(jīng)網(wǎng)絡(luò)。
          • Mind.js - 一個(gè)靈活的神經(jīng)網(wǎng)絡(luò)庫(kù)。
          • Synaptic.js - node.js和瀏覽器的免架構(gòu)神經(jīng)網(wǎng)絡(luò)庫(kù)。
          • TensorFlow.js - 用于在瀏覽器和Node.js上訓(xùn)練和部署ML模型的JavaScript庫(kù)。
          • ml5.js - 友好的網(wǎng)絡(luò)機(jī)器學(xué)習(xí)。

          瀏覽器檢測(cè)

          • bowser - 瀏覽器探測(cè)器。

          基準(zhǔn)

          • benchmark.js - 基準(zhǔn)測(cè)試庫(kù)。正如在jsPerf.com上使用的那樣。
          • matcha - 以咖啡因?yàn)閷?dǎo)向,簡(jiǎn)單化的基準(zhǔn)測(cè)試方法。

          代碼突出顯示

          • Highlight.js - JavaScript語(yǔ)法高亮顯示。
          • PrismJS - 輕巧,強(qiáng)大,優(yōu)雅的語(yǔ)法高亮。

          加載狀態(tài)

          用于指示負(fù)載狀態(tài)的庫(kù)。

          • Mprogress.js - 創(chuàng)建Google Material Design進(jìn)度線性欄。
          • NProgress - 用于Ajax'y應(yīng)用程序的超薄進(jìn)度條。
          • Spin.js - 旋轉(zhuǎn)活動(dòng)指標(biāo)。
          • progress.js - 為頁(yè)面上的每個(gè)對(duì)象創(chuàng)建和管理進(jìn)度條。
          • progressbar.js - 具有動(dòng)畫(huà)SVG路徑的美麗且響應(yīng)迅速的進(jìn)度條。
          • pace - 自動(dòng)為您的網(wǎng)站添加進(jìn)度條。
          • topbar - Tiny&beautiful全站點(diǎn)進(jìn)度指示器。
          • nanobar - 非常輕量級(jí)的進(jìn)度條。沒(méi)有jQuery。
          • PageLoadingEffects - 使用SVG動(dòng)畫(huà)顯示新內(nèi)容的現(xiàn)代方式。
          • SpinKit - 使用CSS動(dòng)畫(huà)的加載指示符的集合。
          • Ladda - 帶內(nèi)置裝載指示器的按鈕。
          • css-loaders - 使用CSS動(dòng)畫(huà)加載微調(diào)器的集合
          • 除了庫(kù)之外,還有Codepen上的Collection,以及Ajaxload,Preloaders和CSSLoad等生成器。

          驗(yàn)證

          • Parsley.js - 無(wú)需編寫(xiě)單行JavaScript即可驗(yàn)證表單前端。
          • jquery-validation - jQuery Validation Plugin。
          • validator.js - 字符串驗(yàn)證和清理。
          • validate.js - 受CodeIgniter啟發(fā)的輕量級(jí)JavaScript表單驗(yàn)證庫(kù)。
          • validatr - 跨瀏覽器HTML5表單驗(yàn)證。
          • FormValidation - 驗(yàn)證表單字段的最佳jQuery插件。以前的BootstrapValidator。
          • is.js - 檢查類型,正則表達(dá)式,狀態(tài),時(shí)間等。
          • FieldVal - 多用途驗(yàn)證庫(kù)。支持同步和異步驗(yàn)證。

          鍵盤包裝

          • mousetrap - 用于處理JavaScript中鍵盤快捷鍵的簡(jiǎn)單庫(kù)。
          • keymaster - 用于定義和分派鍵盤快捷鍵的簡(jiǎn)單微庫(kù)。
          • Keypress - 鍵盤輸入捕獲實(shí)用程序,其中任何鍵都可以是修飾鍵。
          • KeyboardJS - 用于綁定鍵盤組合的JavaScript庫(kù),沒(méi)有鍵碼和鍵組合沖突的痛苦。
          • jquery.hotkeys - jQuery Hotkeys讓您可以在代碼中的任何位置查看鍵盤事件,幾乎可以支持任何組合鍵。
          • jwerty - 鍵盤事件的真棒處理。

          旅游和指南

          • intro.js - 為您的網(wǎng)站和項(xiàng)目提供新功能介紹和分步用戶指南的更好方法。
          • shepherd - 引導(dǎo)您的用戶瀏覽您的應(yīng)用。
          • bootstrap-tour - 使用Twitter Bootstrap Popovers快速輕松地進(jìn)行產(chǎn)品導(dǎo)覽。
          • tourist - - 為您的應(yīng)用程序提供簡(jiǎn)單靈活的旅游。
          • chardin.js - 適用于您的應(yīng)用的簡(jiǎn)單疊加說(shuō)明。
          • pageguide - 使用jQuery和CSS3的網(wǎng)頁(yè)元素的交互式指南。
          • hopscotch - 一個(gè)框架,使開(kāi)發(fā)人員可以輕松地將產(chǎn)品導(dǎo)覽添加到他們的頁(yè)面。
          • joyride - jQuery feature tour插件。
          • focusable - 設(shè)置聚焦于DOM元素的聚光燈,將疊加層添加到頁(yè)面的其余部分。

          通知

          • iziToast - 優(yōu)雅,響應(yīng)靈活,輕量級(jí)的通知插件,沒(méi)有依賴關(guān)系。
          • messenger - 適用于您應(yīng)用的Growl風(fēng)格的提醒和消息。
          • noty - jQuery通知插件。
          • pnotify - Bootstrap,jQuery UI和Web Notifications Draft的JavaScript通知。
          • toastr - 簡(jiǎn)單的JavaScript吐司通知。
          • humane-js - 一個(gè)簡(jiǎn)單,現(xiàn)代的瀏覽器通知系統(tǒng)。
          • smoke.js - 針對(duì)JavaScript的框架無(wú)關(guān)的樣式警報(bào)系統(tǒng)。
          • notie - 沒(méi)有依賴關(guān)系的簡(jiǎn)單通知和輸入。

          滑塊

          • Swiper - 移動(dòng)觸摸滑塊和框架,帶有硬件加速轉(zhuǎn)換。
          • slick - 您需要的最后一個(gè)旋轉(zhuǎn)木馬。
          • slidesJs - 是一個(gè)響應(yīng)式幻燈片插件,適用于JQuery(1.7.1+),具有觸摸和CSS3過(guò)渡等功能
          • FlexSlider - 一個(gè)非常棒的,完全響應(yīng)的jQuery滑塊插件。
          • unslider - 最簡(jiǎn)單的jQuery滑塊。
          • sly - 用于單向滾動(dòng)的JavaScript庫(kù),具有基于項(xiàng)目的導(dǎo)航支持。
          • vegas - 一個(gè)jQuery插件,可以為您的網(wǎng)頁(yè)添加漂亮的全屏背景。它甚至允許幻燈片播放。
          • Sequence - 用于創(chuàng)建響應(yīng)式滑塊,演示文稿,橫幅和其他基于步驟的應(yīng)用程序的CSS動(dòng)畫(huà)框架。
          • reveal.js - 使用HTML輕松創(chuàng)建精美演示文稿的框架。
          • impress.js - 這是一個(gè)基于現(xiàn)代瀏覽器中CSS3轉(zhuǎn)換和轉(zhuǎn)換功能的演示框架,并受到prezi.com背后的想法的啟發(fā)。
          • bespoke.js - DIY演示微框架
          • Strut - Strut - 一個(gè)Impress.js和Bespoke.js演示編輯器
          • PhotoSwipe - 適用于移動(dòng)和桌面的JavaScript圖像庫(kù),模塊化,獨(dú)立于框架。
          • jcSlider - 一個(gè)帶有CSS動(dòng)畫(huà)的響應(yīng)式滑塊jQuery插件。
          • basic-jquery-slider - 使用簡(jiǎn)單,主題簡(jiǎn)單,易于定制。
          • jQuery.adaptive-slider - 一個(gè)帶有自適應(yīng)彩色figcaption和導(dǎo)航的滑塊的jQuery插件。
          • slidr - 添加一些幻燈片效果。
          • Flickity - 觸摸,響應(yīng),可滑動(dòng)的畫(huà)廊。
          • Glide.js - 響應(yīng)和觸摸友好的jQuery滑塊。它簡(jiǎn)單,輕便,快速。
          • jQuery.adaptive-slider - 一個(gè)帶有自適應(yīng)彩色figcaption和導(dǎo)航的滑塊的jQuery插件。
          • Embla Carousel - 用于Web的可擴(kuò)展低級(jí)旋轉(zhuǎn)木馬,用TypeScript編寫(xiě)。

          范圍滑塊

          • Ion.RangeSlider - 功能強(qiáng)大且易于定制的范圍滑塊,具有多種選項(xiàng)和皮膚支持。
          • jQRangeSlider - 支持日期的JavaScript滑塊選擇器。
          • noUiSlider - 輕量級(jí),高度可定制的范圍滑塊,無(wú)膨脹。
          • rangeslider.js - HTML5輸入范圍滑塊元素polyfill。

          表單小部件

          輸入

          • typeahead.js - 一個(gè)快速且功能齊全的自動(dòng)完成庫(kù)。
          • tag-it - 用于處理多標(biāo)記字段以及標(biāo)記建議/自動(dòng)完成的jQuery UI插件。
          • At.js - 添加GitHub就像提到你的應(yīng)用程序的自動(dòng)完成一樣。
          • Placeholders.js - HTML5占位符屬性的JavaScript polyfill。
          • fancyInput - 使用CSS3效果在輸入字段中輸入樂(lè)趣。
          • jQuery-Tags-Input - 使用這個(gè)jQuery插件將一個(gè)簡(jiǎn)單的文本輸入神奇地轉(zhuǎn)換為一個(gè)很酷的標(biāo)簽列表。
          • vanilla-masker - 純JavaScript掩碼輸入。
          • Ion.CheckRadio - 用于樣式復(fù)選框和單選按鈕的jQuery插件。有皮膚支持。
          • awesomplete - 超輕量級(jí),可用,美觀的自動(dòng)完成,零依賴。 -

          日歷

          • pickadate.js - 移動(dòng)友好,響應(yīng)迅速,輕量級(jí)的jQuery日期和時(shí)間輸入選擇器。
          • bootstrap-datepicker - 來(lái)自Stefan Petre(eyecon.ro)的@twitter bootstrap的日期選擇器,由@eternicode改進(jìn)。
          • Pikaday - 一個(gè)令人耳目一新的JavaScript Datepicker - 輕量級(jí),無(wú)依賴關(guān)系,模塊化CSS。
          • fullcalendar - 全尺寸拖放事件日歷(jQuery插件)。
          • rome - 可定制的日期(和時(shí)間)選擇器。免費(fèi)依賴,選擇加入U(xiǎn)I。
          • datedropper - datedropper是一個(gè)jQuery插件,提供了一種快速簡(jiǎn)便的方法來(lái)管理輸入字段的日期。

          選擇

          • selectize.js - Selectize是文本框和選擇框的混合體。這是基于jQuery的,它具有自動(dòng)完成和本機(jī)感鍵盤導(dǎo)航;對(duì)標(biāo)記,聯(lián)系人列表等有用
          • select2 - 基于jQuery的選擇框替換。它支持搜索,遠(yuǎn)程數(shù)據(jù)集和無(wú)限滾動(dòng)結(jié)果。
          • chosen - 一個(gè)庫(kù),用于制作更加友好的長(zhǎng)而笨重的選擇框。

          文件上傳器

          • jQuery-File-Upload - 文件上傳小部件,包含多個(gè)文件選擇,拖放支持,進(jìn)度條,驗(yàn)證和預(yù)覽圖像,jQuery的音頻和視頻。
          • dropzone - Dropzone是一個(gè)易于使用的拖放庫(kù)。它支持圖像預(yù)覽并顯示很好的進(jìn)度條。
          • flow.js - 一個(gè)JavaScript庫(kù),通過(guò)HTML5 File API提供多個(gè)同步,穩(wěn)定,容錯(cuò)和可恢復(fù)/可重新啟動(dòng)的文件上傳。
          • fine-uploader - 多文件上傳插件,帶有進(jìn)度條,拖放,直接上傳到S3。
          • FileAPI - 一組用于處理文件的JavaScript工具。 Multiupload,drag'n'drop和chunked文件上傳。圖像:EXIF裁剪,調(diào)整大小和自動(dòng)方向。
          • plupload - 用于處理文件上傳的JavaScript API,它支持多文件選擇,文件類型過(guò)濾,請(qǐng)求分塊,客戶端圖像縮放等功能,并使用不同的運(yùn)行時(shí)來(lái)實(shí)現(xiàn)此功能,如HTML 5,Silverlight和Flash。

          其他

          • form - jQuery Form Plugin。
          • Garlic.js - 自動(dòng)保留表單的文本并在本地選擇字段值,直到提交表單。
          • Countable - 一個(gè)JavaScript函數(shù),用于向HT添加實(shí)時(shí)段落,字和字符計(jì)數(shù)

          模態(tài)和彈出窗口

          • Magnific-Popup - 輕巧且反應(yīng)靈敏的燈箱腳本,專注于性能。
          • jquery-popbox - jQuery PopBox UI元素。
          • jquery.avgrund.js - 一個(gè)jQuery插件,帶有彈出窗口的新模態(tài)概念。
          • vex - 一個(gè)高度可配置且易于設(shè)計(jì)的現(xiàn)代對(duì)話庫(kù)。
          • bootstrap-modal - 擴(kuò)展默認(rèn)的Bootstrap Modal類。響應(yīng),可堆疊,ajax等。
          • css-modal - 由純CSS構(gòu)建的模態(tài)。
          • jquery-popup-overlay - 用于響應(yīng)和可訪問(wèn)的模態(tài)窗口和工具提示的jQuery插件。
          • SweetAlert - JavaScript警報(bào)的絕佳替代品。
          • baguetteBox.js - 用純JavaScript編寫(xiě)的簡(jiǎn)單易用的lightbox腳本。
          • colorbox - 用于jQuery的輕量級(jí)可定制燈箱插件。
          • fancyBox - 一種工具,為您的網(wǎng)頁(yè)上的圖像,html內(nèi)容和多媒體添加縮放功能提供了一種漂亮而優(yōu)雅的方式。
          • swipebox - 可觸摸的jQuery燈箱
          • jBox - jBox是一個(gè)功能強(qiáng)大且靈活的jQuery插件,可以處理所有彈出窗口,工具提示,通知等。

          滾動(dòng)

          • scrollMonitor - 滾動(dòng)時(shí)監(jiān)視元素的簡(jiǎn)單快速API。
          • eadroom - 給你的頁(yè)面一些空間。隱藏您的標(biāo)題,直到您需要它。
          • onepage-scroll - 使用One Page Scroll插件創(chuàng)建類似Apple的單頁(yè)卷軸網(wǎng)站(iPhone 5S網(wǎng)站)。
          • iscroll - iScroll是一款高性能,占用空間小,無(wú)依賴,多平臺(tái)的JavaScript滾動(dòng)條。
          • skrollr - 適用于移動(dòng)設(shè)備(Android + iOS)和桌面的獨(dú)立視差滾動(dòng)庫(kù)。沒(méi)有jQuery。
          • parallax - 對(duì)智能設(shè)備方向作出反應(yīng)的視差引擎。
          • stellar.js - 視差滾動(dòng)變得容易。
          • plax - jQuery powered parallaxing。
          • jparallax - 用于創(chuàng)建交互式視差效果的jQuery插件。
          • fullPage - 一個(gè)簡(jiǎn)單易用的插件,用于創(chuàng)建全屏滾動(dòng)網(wǎng)站(也稱為單頁(yè)網(wǎng)站)。
          • ScrollMenu - 一個(gè)替換舊的無(wú)聊滾動(dòng)條的新界面。
          • Clusterize.js - Tiny vanilla JS插件,可輕松顯示大型數(shù)據(jù)集。
          • simpleParallax - 簡(jiǎn)單而小巧的JavaScript庫(kù),可在任何圖像上添加視差動(dòng)畫(huà)

          菜單

          • jQuery-menu-aim - 用戶光標(biāo)瞄準(zhǔn)特定下拉菜單項(xiàng)時(shí)觸發(fā)事件的jQuery插件。用于制作像亞馬遜這樣的響應(yīng)式大型下拉菜單。
          • jQuery contextMenu - contextMenu manager。
          • Slideout - 用于移動(dòng)網(wǎng)絡(luò)應(yīng)用的響應(yīng)式觸摸滑動(dòng)導(dǎo)航菜單。
          • 滑動(dòng)和滑動(dòng) - 可與touchSwipe庫(kù)配合使用的滑動(dòng)滑動(dòng)菜單。

          表/網(wǎng)格

          • jTable - 一個(gè)用于創(chuàng)建基于AJAX的CRUD表的jQuery插件。
          • DataTables - (jQuery插件)它是一個(gè)高度靈活的工具,基于漸進(jìn)增強(qiáng)的基礎(chǔ),并將為任何HTML表添加高級(jí)交互控件。
          • Tabulator - (jQuery插件)一個(gè)非常靈活的庫(kù),可以從任何JSON數(shù)據(jù)源或現(xiàn)有HTML表創(chuàng)建具有一系列交互功能的表。
          • Bootstrap表 - 對(duì)流行的Bootstrap框架的擴(kuò)展,用于創(chuàng)建適合您站點(diǎn)樣式的表,而無(wú)需額外的標(biāo)記。
          • floatThead - (jQuery插件)在正文中滾動(dòng)時(shí)鎖定任何表的標(biāo)題。適用于任何表,不需要自定義html或CSS。
          • Masonry - 級(jí)聯(lián)網(wǎng)格布局庫(kù)。
          • Packery - 使用bin-packing算法的網(wǎng)格布局庫(kù)。可用于可拖動(dòng)布局。
          • Isotope- 可過(guò)濾,可排序的網(wǎng)格布局庫(kù)。可以實(shí)現(xiàn)Masonry,Packery和其他布局。
          • flexboxgrid - 基于CSS3 flexbox的網(wǎng)格。

          構(gòu)架

          • 語(yǔ)義UI - 具有許多主題和元素的UI工具包。
          • w2ui - 一組用于數(shù)據(jù)驅(qū)動(dòng)的Web應(yīng)用程序前端開(kāi)發(fā)的jQuery插件。
          • 流動(dòng)性 - 世界上最小的完全響應(yīng)的CSS框架。
          • Ink - SAPO使用的HTML5 / CSS3框架,用于快速有效的網(wǎng)站設(shè)計(jì)和原型設(shè)計(jì)。

          Boilerplates

          • html5-boilerplate - 一個(gè)專業(yè)的前端模板,用于構(gòu)建快速,健壯且適應(yīng)性強(qiáng)的Web應(yīng)用程序或站點(diǎn)。
          • mobile-boilerplate - 一個(gè)前端模板,可幫助您構(gòu)建快速,現(xiàn)代的移動(dòng)Web應(yīng)用程序。
          • webplate - 一個(gè)非常棒的前端框架,讓您可以專注于構(gòu)建您的網(wǎng)站或應(yīng)用程序,同時(shí)保持非常好用。
          • Cerberus - 響應(yīng)式HTML電子郵件的一些簡(jiǎn)單但可靠的模式。甚至在Outlook中。
          • full-page-intro-and-navigation - 帶有全寬背景圖像的介紹頁(yè)面,大膽的動(dòng)畫(huà)菜單以及導(dǎo)航背后的類似iOS的模糊效果。
          • Fluid-Squares- 方形單元的流體網(wǎng)格。
          • Mobile-First-RWD - 移動(dòng)優(yōu)先響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)的一個(gè)例子。
          • this-is-responsive - 這是響應(yīng)。
          • npm run-scripts使用NPM運(yùn)行腳本進(jìn)行任務(wù)自動(dòng)化。

          手勢(shì)

          • hammer.js - 用于多點(diǎn)觸控手勢(shì)的JavaScript庫(kù)。
          • touchemulator - 模擬桌面上的觸摸輸入。
          • Dragula - 拖放這么簡(jiǎn)單就好疼。

          地圖

          • Leaflet - 適用于移動(dòng)設(shè)備的交互式地圖的JavaScript庫(kù)。
          • Cesium - 開(kāi)源WebGL虛擬地球儀和地圖引擎。
          • gmaps - 使用Google地圖的最簡(jiǎn)單方法。
          • polymaps - 一個(gè)免費(fèi)的JavaScript庫(kù),用于在現(xiàn)代Web瀏覽器中制作動(dòng)態(tài)交互式地圖。
          • kartograph.js - Kartograph SVG地圖的開(kāi)源JavaScript渲染器。
          • mapbox.js - Mapbox JavaScript API,一個(gè)Leaflet插件。
          • jqvmap - jQuery矢量地圖庫(kù)。
          • OpenLayers3 - 一個(gè)高性能,功能豐富的庫(kù),可滿足您的所有映射需求。

          視頻/音頻

          • prettyembed.js - Prettier嵌入你的YouTubes - 具有很好的選項(xiàng),如高分辨率預(yù)覽圖像,嵌入選項(xiàng)的高級(jí)自定義,以及可選的FitVids支持。
          • html5media - 在所有主流瀏覽器中啟用和標(biāo)記。
          • Play-em JS - Play'em是一個(gè)JavaScript組件,它管理音樂(lè)/視頻軌道隊(duì)列,并通過(guò)在HTML DIV(包括Youtube,Soundcloud和Vimeo)中嵌入多個(gè)玩家來(lái)播放一系列歌曲。
          • polyplayer - 使用一個(gè)API來(lái)規(guī)則YouTube,Soundcloud和Vimeo播放器。
          • flowplayer - 用于網(wǎng)絡(luò)的HTML5視頻播放器
          • mediaelement - HTML5或具有Flash和Silverlight填充程序的播放器,模仿HTML5 MediaElement API,在所有瀏覽器中實(shí)現(xiàn)一致的UI。 http://mediaelementjs.com/
          • SoundJS - 一個(gè)可以更輕松地在網(wǎng)絡(luò)上處理音頻的庫(kù)。它為在不同瀏覽器中播放音頻提供了一致的API。
          • video.js - Video.js - 開(kāi)源HTML5和Flash視頻播放器。
          • FitVids.js - 一個(gè)輕量級(jí),易于使用的jQuery插件,用于流體寬度視頻嵌入。
          • Ion.Sound - 任何網(wǎng)頁(yè)上的簡(jiǎn)單聲音。
          • photobooth-js - 一個(gè)小部件,允許用戶在您的網(wǎng)站上拍攝他們的頭像。
          • clappr - 一個(gè)可擴(kuò)展的網(wǎng)絡(luò)媒體播放器http://clappr.io

          活版印刷

          • FlowType.JS - 最好的Web排版:基于元素寬度的字體大小和行高。
          • BigText - jQuery插件,計(jì)算將一行文本與特定寬度匹配所需的字體大小和字間距。
          • circletype - 一個(gè)jQuery插件,可以讓你在網(wǎng)絡(luò)上輸入曲線。
          • slabText - 一個(gè)jQuery插件,用于生成大膽,響亮的標(biāo)題。
          • simple-text-rotator - 在您的網(wǎng)站上添加一個(gè)超級(jí)簡(jiǎn)單的旋轉(zhuǎn)文本,幾乎沒(méi)有標(biāo)記。
          • novacancy.js - 文本Neon Golden效果jQuery插件。
          • jquery-responsive-text - 使文本大小響應(yīng)!
          • FitText.js - 用于膨脹Web類型的jQuery插件。
          • Lettering.js - 一個(gè)輕量級(jí),易于使用的JavaScript <span>注入器,用于激進(jìn)的Web排版。

          動(dòng)畫(huà)

          • velocity - 加速JavaScript動(dòng)畫(huà)。
          • jquery.transit - jQuery的超級(jí)流暢的CSS3轉(zhuǎn)換和轉(zhuǎn)換。
          • impress.js - 在HTML文檔中使用CSS3轉(zhuǎn)換/轉(zhuǎn)換進(jìn)行類似Prezi的演示。
          • bounce.js - 立即創(chuàng)建美味的CSS3動(dòng)畫(huà)動(dòng)畫(huà)。
          • GreenSock-JS - 適用于所有主流瀏覽器的高性能HTML5動(dòng)畫(huà)。
          • TransitionEnd - TransitionEnd是一個(gè)不可知的跨瀏覽器庫(kù),用于處理轉(zhuǎn)換事件。
          • Dynamic.js - 用于創(chuàng)建基于物理的CSS動(dòng)畫(huà)的JavaScript庫(kù)。
          • the-cube - 多維數(shù)據(jù)集是CSS3過(guò)渡的實(shí)驗(yàn)。
          • Effeckt.css - 一個(gè)高效的過(guò)渡和動(dòng)畫(huà)庫(kù)
          • animate.css - CSS動(dòng)畫(huà)的跨瀏覽器庫(kù)。因?yàn)橐子谑褂靡子谑褂谩?/li>
          • textillate - CSS3文本動(dòng)畫(huà)的簡(jiǎn)單插件。
          • move.js - CSS3支持的JavaScript動(dòng)畫(huà)框架。
          • animatable - 一個(gè)屬性,兩個(gè)值,無(wú)限可能。
          • shuffle-images - 以創(chuàng)造性的方式改變圖像的最簡(jiǎn)單方法
          • smoothState.js - 使用jQuery進(jìn)行不顯眼的頁(yè)面轉(zhuǎn)換。
          • Anime.js - 一個(gè)JavaScript動(dòng)畫(huà)引擎
          • Mo.js - 用于網(wǎng)絡(luò)的運(yùn)動(dòng)圖形工具帶
          • particles.js - 用于創(chuàng)建粒子的輕量級(jí)JavaScript庫(kù)。

          圖像處理

          • lena.js - 具有過(guò)濾器和util函數(shù)的圖像處理庫(kù)。
          • Pica - 高質(zhì)量圖像調(diào)整大小(使用快速Lanczos過(guò)濾器,在純JS中實(shí)現(xiàn))。
          • cropper - 一個(gè)簡(jiǎn)單的jQuery圖像裁剪插件。

          ES6

          • es6features - ECMAScript 6功能概述。
          • es6-features - ECMAScript 6:功能概述和比較。
          • es6-cheatsheet - ES2015 [ES6] cheatsheet包含提示,技巧,最佳實(shí)踐和代碼片段。
          • ECMAScript 6兼容性表 - 適用于各種環(huán)境的所有ECMAScript 6功能的兼容性表。
          • Babel(以前為6to5) - 將ES6 +代碼轉(zhuǎn)換為vanilla ES5,沒(méi)有運(yùn)行時(shí)。
          • Traceur編譯器 - ES6功能> ES5。包括類,生成器,承諾,解構(gòu)模式,默認(rèn)參數(shù)等。

          產(chǎn)生器

          • Gatsby.js - 基于React的靜態(tài)站點(diǎn)生成器。

          SDK

          • javascript-sdk-design - 從工作和個(gè)人經(jīng)驗(yàn)中提取的JavaScript SDK設(shè)計(jì)指南
          • Spotify SDK - 面向?qū)嶓w的SDK,可與Spotify Web API配合使用。
          • Square Node.js SDK - 用于支付和其他Square API的JavaScript客戶端庫(kù)。

          雜項(xiàng)

          • echo - 具有data- *屬性的延遲加載圖像。
          • picturefill - 用于<picture>,srcset,sizes的響應(yīng)式圖像polyfill。
          • platform.js - 幾乎適用于所有JavaScript平臺(tái)的平臺(tái)檢測(cè)庫(kù)。
          • json3 - 與幾乎所有JavaScript平臺(tái)兼容的現(xiàn)代JSON實(shí)現(xiàn)。
          • Logical Or Not - 關(guān)于JavaScript特性的游戲。
          • BitSet.js - JavaScript Bit-Vector實(shí)現(xiàn)
          • spoiler-alert - SPOILER ALERT!一個(gè)快樂(lè)的小jquery插件,以隱藏您的網(wǎng)站上的劇透。
          • jquery.vibrate.js - Vibration API Wrappers
          • list.js - 為表,列表和各種HTML元素添加搜索,排序,過(guò)濾器和靈活性。構(gòu)建為不可見(jiàn)并處理現(xiàn)有HTML。 http://www.listjs.com
          • mixitup - MixItUp - 過(guò)濾和排序插件。
          • grid - 拖放庫(kù),用于二維,可調(diào)整大小和響應(yīng)式列表。
          • jquery-match-height - jQuery的響應(yīng)性相等高度插件。
          • survey.js - JavaScript Survey Engine。它使用JSON進(jìn)行調(diào)查元數(shù)據(jù)和結(jié)果。
          • Array Explorer和Object Explorer - 幫助確定在任何給定時(shí)間最適合使用本機(jī)JavaScript方法的資源
          • Clipboard.js - “復(fù)制到剪貼板”沒(méi)有Flash或使用框架。
          • ky - 基于瀏覽器Fetch API的簡(jiǎn)潔優(yōu)雅的HTTP客戶端。

          播客

          • JavaScript Air - 所有關(guān)于JavaScript和Web平臺(tái)的實(shí)時(shí)視頻廣播播客。
          • Web of Tomorrow - 為初學(xué)者播放有關(guān)JavaScript的播客。
          • JavaScript Jabber - 關(guān)于JavaScript的每周播客,包括Node.js,前端技術(shù),職業(yè),團(tuán)隊(duì)等。

          值得一讀

          你不懂JS - 可能是用現(xiàn)代JavaScript編寫(xiě)的最好的書(shū),完全可以免費(fèi)在線閱讀,或者可以買來(lái)支持作者。

          • braziljs / js-the-right-way - 一個(gè)易于閱讀的快速參考,用于JS最佳實(shí)踐,可接受的編碼標(biāo)準(zhǔn)以及Web上的鏈接。
          • JSbooks - 免費(fèi)JavaScript電子書(shū)目錄。
          • Superhero.js - 有關(guān)創(chuàng)建,測(cè)試和維護(hù)大型JavaScript代碼庫(kù)的資源集合。
          • SJSJ - 簡(jiǎn)化的JavaScript術(shù)語(yǔ)是一個(gè)社區(qū)驅(qū)動(dòng)的嘗試,用一些簡(jiǎn)單的詞語(yǔ)解釋當(dāng)前JavaScript生態(tài)系統(tǒng)的流行語(yǔ)。
          • 如何編寫(xiě)開(kāi)源JavaScript庫(kù) - 通過(guò)一系列步驟發(fā)布JavaScript開(kāi)源庫(kù)的綜合指南。
          • Jaavascript教程 - 通過(guò)各種用戶排名的在線教程在線學(xué)習(xí)Javascript。

          原文:https://github.com/sorrycc/awesome-javascript

          本文:https://pub.intelligentx.net/collection-awesome-browser-side-javascript-libraries-resources-and-shiny-things

          討論:請(qǐng)加入知識(shí)星球或者小紅圈【首席架構(gòu)師圈】

          一節(jié)增加推薦圖書(shū)的提交和刪除功能,來(lái)學(xué)習(xí)node的form提交以及node的圖片上傳功能。開(kāi)始之前需要源碼同學(xué)可以先在git上fork:https://github.com/stoneniqiu/ReadingClub

          一、form驗(yàn)證

          MVC的form驗(yàn)證有三個(gè)地方可以做,第一道關(guān)就是前端提交之前,第二道關(guān)就是在數(shù)據(jù)保存之前,也就是在controller中做驗(yàn)證,第三道關(guān)就是數(shù)據(jù)保存的時(shí)候,也就是如果提交的數(shù)據(jù)模型不符合實(shí)體定義的約束,數(shù)據(jù)是無(wú)法保存的,這是最后一道防線。第一道關(guān)主要是依賴于js或者jquery框架,比較常用的是jquery.validate.js。如果是Asp.net MVC 可以自動(dòng)生成驗(yàn)證規(guī)則,這里就不細(xì)究了,網(wǎng)上有很多文章。第二層和各自的業(yè)務(wù)邏輯有關(guān),也需要做一些必要驗(yàn)證,防止前端禁止JavaScript,而提交不合法數(shù)據(jù),這里是要講基于Mongoose的第三層驗(yàn)證。

          1.回顧模型定義

          我們先回顧一下之前用Mongoose定義的book模型:

          var bookSchema=new mongoose.Schema({
              title: { type: String, required: true },
              rating: {
                  type: Number,
                  required: true,
                  min: 0,
                  max: 5
              },
              info: { type: String, required: true },
              img: String,
              tags: [String],
              brief: { type: String, required: true },
              ISBN: String,
          });

          每個(gè)屬性定義了類型和是否必須,還可以添加min,max,默認(rèn)值等其他約束。如果提交的模型不滿足這些約束,將不能保存成功。相當(dāng)于Asp.net MVC中的DataAnnotations的作用。后面的form驗(yàn)證就基于此。

          2.添加路由

          我們需要增加4個(gè)路由規(guī)則,2個(gè)用于添加(一個(gè)get,一個(gè)post),一個(gè)用于刪除,一個(gè)用于上傳圖片:

          router.get('/book/create', homeController.bookcreateview);
          router.post('/book/create', homeController.doBookCreate);
          router.delete('/book/:id', homeController.delete);
          router.post('/uploadImg', homeController.uploadImg);

          基于Express的路由,我們可以創(chuàng)建Restful的路由規(guī)則。路由位于app_server文件夾下。

          3.添加控制器方法

          home.bookcreateview:

          module.exports.bookcreateview=function (req, res) {
              res.render('bookCreate', { title: '新增推薦圖書(shū)' });
          };

          這里直接是一個(gè)get請(qǐng)求,所以直接用render去渲染視圖,當(dāng)然這個(gè)bookCreate視圖接下來(lái)會(huì)創(chuàng)建。

          doBookCreate:

          module.exports.doBookCreate=function (req, res) {
              var requestOptions, path, postdata;
              path="/api/book";
              postdata={
                  title: req.body.title,
                  info: req.body.info,
                  ISBN: req.body.ISBN,
                  brief: req.body.brief,
                  tags: req.body.tags,
                  img: req.body.img,
                  rating:req.body.rating,
              };
              requestOptions={
                  url: apiOptions.server + path,
                  method: "POST",
                  json: postdata,
              };
              request(requestOptions, function (err, response, body) {
                  console.log("body.name", body.name, response.statusCode);
                  if (response.statusCode===201) {
           res.redirect("/detail/"+body._id);
                  } 
                  else if (response.statusCode==400 && body.name && body.name=="ValidationError") {
           res.render('bookCreate', { title: '新增推薦圖書(shū)', error:"val"});
                  }
                  else {
           console.log("body.name",body.name);
           info(res, response.statusCode);
                  }
              });
          };

          info:

          function info (res, status) {
              var title, content;
              if (status===404) {
                  title="404, 頁(yè)面沒(méi)有找到";
                  content="親,頁(yè)面飛走了...";
              } else if (status===500) {
                  title="500, 內(nèi)部錯(cuò)誤";
                  content="尷尬...,發(fā)生錯(cuò)誤";
              } else {
                  title=status + ", 有什么不對(duì)勁";
                  content="某些地方可能有些錯(cuò)誤";
              }
              res.status(status);
              res.render('info', {
                  title : title,
                  content : content,
                  status: status,
              });
          };

          View Code

          在上一節(jié),我們創(chuàng)建了數(shù)據(jù)操作的api部分。代碼的流程就是先從req中獲取到前端傳過(guò)來(lái)的數(shù)據(jù),然后用request模塊調(diào)用api,如果添加成功(狀態(tài)碼是201)就返回到detail頁(yè)面,如果驗(yàn)證失敗,就原路返回,并給出提示。如果錯(cuò)誤,交給info方法去處理。

          delete:

          module.exports.delete=function (req, res) {
              var requestOptions, path;
              path="/api/book/" + req.params.id;
              requestOptions={
                  url: apiOptions.server + path,
                  method: "delete",
                  json: {},
              };
              request(requestOptions, function (err, response, body) {
                  if (response.statusCode==204) {
           res.json(1);
                  } 
                  else {
           res.json(0);
                  }
              });
          };

          如果刪除成功,返回的狀態(tài)碼是204,然后返回json(1)讓前端去處理界面。

          4.添加視圖

          1) 先需要在圖書(shū)列表的右側(cè)邊欄增加一個(gè)按鈕:

          在books視圖中修改:

             .col-md-3
               .userinfo
                 p stoneniqiu
                 a(href='/book/create').btn.btn-info 新增推薦

          當(dāng)用戶點(diǎn)擊會(huì)跳轉(zhuǎn)到/book/create頁(yè)面

          2)新增推薦頁(yè)面:

          extends layout
          include _includes/rating
          
          block content
            .row
             .col-md-12.page.bookdetail
                h3 新增推薦書(shū)籍  
                .row
                  .col-xs-12.col-md-6
                   form.form-horizontal(action='',method="post",role="form")
           - if (error=="val")
           .alert.alert-danger(role="alert") All fields required, please try again
           .form-group
           label.control-label(for='title') 書(shū)名
           input#name.form-control(name='title')
           .form-group
           label.control-label(for='info') 信息
           input#name.form-control(name='info') 
           .form-group
           label.control-label(for='ISBN') ISBN
           input#name.form-control(name='ISBN')
           .form-group
           label.control-label(for='brief') 簡(jiǎn)介
           input#name.form-control(name='brief')
           .form-group
           label.control-label(for='tags') 標(biāo)簽
           input#name.form-control(name='tags')
           .form-group
           label.control-label(for='rating') 推薦指數(shù)
           select#rating.form-control.input-sm(name="rating")
           option 5
           option 4
           option 3
           option 2
           option 1
           .form-group
           p 上傳圖片
           a.btn.btn-info(id="upload", name="upload") 上傳圖片
           br
           img(id='img')
           .form-group
           button.btn.btn-primary(type='submit') 提交
              

          if語(yǔ)句的地方是用來(lái)顯示錯(cuò)誤提示;圖片上傳,稍后完整介紹;所以提交頁(yè)面基本長(zhǎng)成這樣:

          3)Mongoose驗(yàn)證

          這個(gè)時(shí)候沒(méi)有加前端驗(yàn)證,form可以直接提交。但是node打印出了錯(cuò)誤日志,Book validation failed,驗(yàn)證失敗。

          這是Mongoose給我們返回的驗(yàn)證信息,這時(shí)界面上回顯示一個(gè)提示信息:

          這是因?yàn)樵赾ontroller中的處理:

            else if (response.statusCode==400 && body.name && body.name=="ValidationError") {
           res.render('bookCreate', { title: '新增推薦圖書(shū)', error:"val"});
                  }

          以上說(shuō)明了Mongoose會(huì)在數(shù)據(jù)保存的時(shí)候驗(yàn)證實(shí)體,如果實(shí)體不滿足path規(guī)則,將不能保存。但至此有三個(gè)問(wèn)題,第一個(gè)問(wèn)題是提示信息不明確,當(dāng)然我們可以遍歷輸出ValidatorError;第二個(gè)就是,驗(yàn)證錯(cuò)誤之后,頁(yè)面原來(lái)的數(shù)據(jù)沒(méi)有了,需要再輸入一遍,這個(gè)我們可以參考Asp.net MVC將模型數(shù)據(jù)填充到視圖中可以解決;第三個(gè)問(wèn)題就是頁(yè)面前端還沒(méi)有驗(yàn)證,form直接就可以提交了,這個(gè)可以通過(guò)簡(jiǎn)單的Jquery腳本就可以做到;這三點(diǎn)先不細(xì)究。繼續(xù)往下看,如果規(guī)范輸入,這個(gè)時(shí)候是可以提交的,提交之后在books頁(yè)面可以看到:

          4)刪除

          在標(biāo)題的右側(cè)增加了一個(gè)刪除符號(hào)(books視圖中):

                   .col-md-10
           p
           a(href="/Detail/#{book._id}")=book.title
           span.close(data-id='#{book._id}') &times;

          并添加腳本:

          $(".close").click(function {
              if (confirm("確定刪除?")) {
                  var id=$(this).data("id");
                  var row=$(this).parents(".booklist");
                  $.ajax({
           url: "/book/" + id,
           method: "delete",
                  }).done(function(data) {
           console.log(data);
           row.fadeOut;
                  });
              }
          });

          腳本可以先位于layout視圖下方:

            script(src='/javascripts/books.js')

          這樣,刪除完成之后會(huì)隱藏當(dāng)前行。下面解決圖片上傳問(wèn)題。

          二、圖片上傳

          前面我們?cè)诼酚衫锩娑x了一個(gè)uploadimg方法,現(xiàn)在實(shí)現(xiàn)它。一般都涉及兩個(gè)部分,一個(gè)是前臺(tái)圖片的提交,一個(gè)是后端數(shù)據(jù)的處理。

          1.uploadimg 方法實(shí)現(xiàn)

          先需要安裝formidable模塊。

          然后在Public文件下創(chuàng)建一個(gè)upload/temp文件夾

          腳本:

          var fs=require('fs');
          var formidable=require('formidable');
          module.exports.uploadImg=function (req, res) {
            var form=new formidable.IncomingForm;   //創(chuàng)建上傳表單
                form.encoding='utf-8';        //設(shè)置編輯
                form.uploadDir='./../public/upload/temp/';     //設(shè)置上傳目錄
                form.keepExtensions=true;     //保留后綴
                form.maxFieldsSize=3 * 1024 * 1024;   //文件大小
          
              form.parse(req, function(err, fields, files) {
                  console.log(files);
                  if (err) {
           console.log(err);
           return res.json(0);        
                  }
                  for (var key in files) {
           console.log(files[key].path);
           var extName=''; //后綴名
           switch (key.type) {
           case 'image/pjpeg':
           extName='jpg';
           break;
           case 'image/jpeg':
           extName='jpg';
           break;
           case 'image/png':
           case 'image/x-png':
           default:
           extName='png';
           break;
           }
           var avatarName=(new Date).getTime + '.' + extName;
           var newPath=form.uploadDir + avatarName;
           
            fs.renameSync(files[key].path, newPath); //重命名
           return res.json("/upload/temp/"+ avatarName);
                  }
              });
           
          };

          這個(gè)form會(huì)自動(dòng)將文件保存到upLoadDir目錄,并以u(píng)pload_xxxx格式重新命名,所以最后使用fs模塊對(duì)文件進(jìn)行重命名。然后返回給前端。

          2.前端

          我喜歡用插件,前端我用的是plupload-2.1.8,擁有多種上傳方式,比較方便。放置在Public文件下。在layout.jade中引用js:

             script(src='/plupload-2.1.8/js/plupload.full.min.js')
             script(src='/javascripts/books.js')

          而在bookCreate.jade視圖中,修改如下:

           a.btn.btn-info(id="upload", name="upload") 上傳圖片
           br
           img(id='img')
           input#imgvalue(type='hidden',name='img',value='')

          a標(biāo)簽用來(lái)觸發(fā)上傳,img用來(lái)預(yù)覽,input用來(lái)存放路徑。在books.js下增加以下代碼:

          var uploader=new plupload.Uploader({
              runtimes: 'html5,flash,silverlight,html4',
              browse_button: "upload",
              url: '/uploadImg',
              flash_swf_url: '/plupload-2.1.8/js/Moxie.swf',
              silverlight_xap_url: '/plupload-2.1.8/js/Moxie.xap',
              filters: {
                  max_file_size: "3mb",
           mime_types: [
           { title: "Image files", extensions: "jpg,gif,png" },
           { title: "Zip files", extensions: "zip" }
           ]
              },
              init: {
                  PostInit: function  {
                  },
                  FilesAdded: function (up, files) {
           plupload.each(files, function (file) {
           uploader.start;
           });
                  },
                  UploadProgress: function (up, file) {
                  },
                  Error: function (up, err) {
                  }
              }
          });
          uploader.init;
          uploader.bind('FileUploaded', function (upldr, file, object) {
              var data=JSON.parse(object.response);
              console.log(data);
              $("#img").attr("src", data);
              $("#imgvalue").val(data);
          });

          提交:

          上傳成功后跳轉(zhuǎn)到detail頁(yè)面。

          至此,圍繞form的提交這一節(jié)學(xué)習(xí)了Mongoose的數(shù)據(jù)驗(yàn)證,以及使用plupload上傳,以及后端用formidable和fs模塊處理圖片。相對(duì)于Asp.net MVC而言,Asp.net MVC因?yàn)橛凶詣?dòng)化的form相對(duì)快捷一些。下一節(jié)將介紹Angular,作為MEAN中的A,該出場(chǎng)了。


          主站蜘蛛池模板: 一区二区三区电影网| 伦精品一区二区三区视频| 中文字幕精品无码一区二区| 成人一区二区免费视频| 精品国产一区二区三区久久| 蜜臀AV免费一区二区三区| 精品无码综合一区二区三区| 精品国产一区二区二三区在线观看| 国产伦精品一区二区三区免.费 | 亚洲AV成人精品一区二区三区| 国产小仙女视频一区二区三区| 国产aⅴ一区二区| 亚洲天堂一区二区| 福利片免费一区二区三区| 农村人乱弄一区二区 | 国产综合视频在线观看一区| 国产高清在线精品一区二区三区| 久久精品岛国av一区二区无码| 精品少妇人妻AV一区二区| 国产高清在线精品一区二区| 精品乱码一区二区三区四区| 精品一区二区高清在线观看| 无码人妻精品一区二区在线视频| 亚洲一本一道一区二区三区| 亚洲国产成人精品久久久国产成人一区二区三区综| 成人无码AV一区二区| 久久精品无码一区二区三区免费| 精品国产免费一区二区三区| 伊人色综合网一区二区三区 | 国产爆乳无码一区二区麻豆 | 极品少妇一区二区三区四区| 人妻少妇AV无码一区二区| 国产综合视频在线观看一区 | 又硬又粗又大一区二区三区视频| 亚洲AV成人一区二区三区观看 | 亚洲综合在线成人一区| 欧洲精品无码一区二区三区在线播放| 日本精品高清一区二区2021| 无码国产精品一区二区免费vr| 一区二区三区免费视频网站| 亚洲av无码一区二区三区人妖|