1. Web Components 前端模塊化
此為瀏覽器的原生組件,由google推動,參照阮一峰列舉的案例添加了注釋。
以下為js部分
由此,user-card組件便可隨時使用,個人認為語法略顯笨重,需配合第三方工具使用。。。
2. 如何學習前端模塊化知識
學習前端模塊化知識主要集中精力學好以下知識點:
1、學好三駕馬車:HTML5 + CSS3 + JavaScrip
2、推薦學習過程:
1)CSS
(1)入門:
Codeademy上的html&css課程——在線互動式編程平台,弄清楚基本概念和基本語法
w3school上的HTML/CSS教程——技術手冊式的教程,比較全面,照著實例敲一遍
(2)進階:
《精通CSS·高級Web標准解決方案》——對CSS有一個比較深入的學習,對核心技術了解。
《HTML5權威指南》——非常全面的書,內容也很新,包含了HTML5+CSS3+JS DOM
(3)實戰:
bootstrap框架: bootstrap中文網/《bootstrap實戰》——流行的前端框架,注重實用即可
Codeademy上的Web Developer Skills+Projects——通過自己做小頁面/小網站來運用所學
(4)提高:
《CSS禪意花園》——提高自己的藝術設計能力,通過實例來學習如何用CSS設計出漂亮的頁面
2).Javascript:
(1)入門:
Codeademy上的javascript教程——實例比較多,比較淺,算是基本了解JS
w3school上的JS教程——比較詳細的了解下JS的特性
《JavaScript DOM編程藝術》——講js和DOM的基本知識和運用,了解JS和DOM可以做什麼
(2)進階:
《JavaScript高級程序設計》——JS聖經,比較全面,非常好的一本書,比犀牛書可閱讀性強
《JavaScript權威指南》——傳說中的犀牛書,好厚好厚的一本書,不適合入門,適合當工具書看
《JavaScript語言精粹》——很薄的一本書,但是可以幫助你快速了解JS的精華部分
(3)實戰:
jQuery框架: w3school上的jQuery教程/Codeademy上的jQuery教程——了解Jquery
《jQuery基礎教程》——流行的前端框架,注重實用
(4)提高:
《高性能JavaScript》——講如何提高js性能,以及構建和部署文件到生產環境的最佳實踐
《Secrets of the JavaScript Ninja》——jQuery作者寫的書,如果你覺得精通JS了再看這本書
3. gulp+webpack怎麼實現前端模塊化
gulp是前端開發過程中對代碼進行構建的工具,是自動化項目的構建利器;她不僅能對網站資源進行優化,而且在開發過程中很多重復的任務能夠使用正確的工具自動完成;使用她,我們不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。
gulp是基於Nodejs的自動任務運行器, 她能自動化地完成
javascript/coffee/sass/less/html/image/css
等文件的的測試、檢查、合並、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動後重復指定的這些步驟。在實現上,她借鑒了Unix操作系統的管道(pipe)思想,前一級的輸出,直接變成後一級的輸入,使得在操作上非常簡單。通過本文,我們將學習如何使用Gulp來改變開發流程,從而使開發更加快速高效。
gulp 和 grunt 非常類似,但相比於 grunt 的頻繁 IO 操作,gulp 的流操作,能更快地更便捷地完成構建工作。
webpack
Webpack 是當下最熱門的前端資源模塊化管理和打包工具。它可以將許多鬆散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。還可以將按需載入的模塊進行代碼分隔,等到實際需要的時候再非同步載入。通過 loader 的轉換,任何形式的資源都可以視作模塊,比如 CommonJs 模塊、 AMD 模塊、 ES6 模塊、CSS、圖片、 JSON、Coffeescript、 LESS 等。
**當然個人還是喜歡webpack的模塊化優秀
廢話不多說現在開始gulp之旅
初始化項目(此處已經認為node環境已經安裝)
建立文件夾 名字自己隨便取 比如 gulpText,然後輸入以下命令
$ cd gulpText
$ mkdir images //建立存放圖片文件夾
$ mkdir src // 存放 js 以及css
$ mkdir index.html //主頁
$ mkdir gulpfile.js //編寫gulp 任務文件
$ mkdir mock //mock數據
然後輸入以下命令 然後一路點下去生成json文件
$npm init
打開json文件看到這樣的
1474889102536.png
全局安裝gulp以便我們運行gulp進行打包等操作
$npm install gulp -g
如果感覺npm安裝比較慢可以切換至cnpm下載,代碼如下
$npm install cnpm -g
安裝gulp包,方便我們引用gulp
$npm install gulp
成功截圖
1474889517162.png
編寫gulp任務
引入 gulp
//引入gulp
var gulp = require('gulp');
拷貝Index.html
//html
gulp.task('-index',function () {
gulp.src('./index.html')
.pipe(gulp.dest('./build'));
})
執行命令
$ gulp -index
1474890843877.png]( http://upload-images.jianshu.io/upload_images/2905209-c00d640651bde279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
1474890828271.png
拷貝images
// images
gulp.task('-images',function () {
gulp.src('./images**/*')
.pipe(gulp.dest('./build/'));
})
執行命令
$ gulp -iamges
1474891076408.png
1474891039689.png
css預處理
現在我們在src目錄里創建文件styles放我們的scss代碼,需要把scss代碼編譯到/build/prd/styles/下
$ cd src
$ mkdir styles
$ cd styles
$ touch app.scss
$ touch common.scss
app.scss項目代碼
@charset "UTF-8";
@import "./common.scss";
body{
background-color: $base-color;
color: #000;
font-size: 20px;
font-weight: 800;
}
html{
width: 100%;
height: 100%;
}
html{
width: 100%;
height: 100%;
}
.lsds{
width: 100px;
height: 100px;
}
common.scss代碼
$base-color:yellow;
安裝css預編譯包
$ npm install gulp-sass //sass編輯包
$ npm install gulp-minify-css'); //css壓縮包
//引入css預處理模塊
var sass= require('gulp-sass');
//引入css壓縮模塊
var minifyCSS = require('gulp-minify-css');
//css預處理
var cssFiles=[
'./src/styles/app.scss'
];
gulp.task('scss',function () {
gulp.src(cssFiles)
.pipe(sass().on('error',sass.logError))
.pipe(minifyCSS())
.pipe(gulp.dest('./build/prd/styles/'))
})
編輯scss
$ gulp scss
開啟服務
安裝server包
$ npm install gulp-webserver
//引入gulp-webserver 模塊
var server = require('gulp-webserver');
gulp.task('server',function () {
gulp.src('./')
.pipe(server({
host:'127.0.0.1', //ip
port:80, //埠
directoryListing:{
enable:true,
path:'./'
},
livereload:true,
}));
})
4. 模塊化需要回答系統架構的那些問題
這篇文章給大家介紹前端模塊化要解決的兩個問題分別是什麼,內容非常詳細,感興趣的小夥伴們可以參考借鑒,希望對大家能有所幫助。
前言
前端模塊化,主要是解決兩個問題「命名空間沖突」,「文件依賴管理」。
坑___命名空間沖突
我自己測試好的代碼和大家合並後怎麼起沖突了?
頁面腳本的變數或函數覆蓋了公有腳本的。
坑___文件依賴管理
明明項目需要引入的包都引進來了怎麼還報缺少包?
手動管理依賴,有天要更換某個插件,要深入代碼內部進行修改
如下圖,顯示的代碼載入,依賴關系復雜。在F.js中,分不清某個變數是來自C.js,還是E.js
兩次載入同一個模塊。比如引入了兩遍JQ
其他的坑
為了實現腳本復用,將一個很大的公用public文件引入各個頁面中,其中的某些函數,只有個別頁面用到。
某個功能的函數群函數,與另一個功能的函數群擺在一起,使用注釋來分隔。
目前解決的方法是:模塊化
命名空間:各個模塊的命名空間獨立。A模塊的變數x不會覆蓋B模塊的變數x。
模塊的依賴關系:通過模塊管理工具如webpack/requireJS/browserify等進行管理。
模塊化的基本原理解決命名空間沖突
JavaScript的缺陷,首當其沖就是全局變數。這使得每想命名一個變數的時候都要三思又三思,生怕上方無窮遠的地方有一個同事些的代碼和自己沖突。以下是一些防範方法
一、使用命名空間
代碼如下:
//定義 var mole = { name: 'rouwan', sayName:function(){ console.log(this.name) } } //使用 var a = mole.name; console.log(a)
總結:直接修改name不會影響mole.name,一定程度保護了命名空間。有兩個缺點,一,外部還是可以修改mole的屬性和方法。二,命名空間有時長起來超乎你的想像。適合一些小型的封裝,如一些配置。
二、立即執行函數 + 閉包(實現模塊的基本方法)
立即函數可以創建作用域,閉包則可以形成私有變數和函數
//創建 var mole = (function(){ var privateName = 'inner'; //私有變數 var privateFunc = function(){ //私有函數 console.log('私有函數') } return {
5. 如何實現前端模塊化開發
SeaJS 是一個適用於 Web 瀏覽器端的模塊載入器。
使用 SeaJS,可以更好地組織 JavaScript 代碼。
6. 如何實現前端模塊化開發
requireJS seaJS都是模塊化開發的 你可以網上搜下文檔 很簡單的
7. 如何理解前端模塊化
前端模塊化
在JavaScript發展初期就是為了實現簡單的頁面交互邏輯,寥寥數語即可;如今CPU、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術得到廣泛應用,jQuery等前端庫層出不窮,前端代碼日益膨脹
這時候JavaScript作為嵌入式的腳本語言的定位動搖了,JavaScript卻沒有為組織代碼提供任何明顯幫助,甚至沒有類的概念,更不用說模塊(mole)了,JavaScript極其簡單的代碼組織規范不足以駕馭如此龐大規模的代碼
模塊
既然JavaScript不能handle如此大規模的代碼,我們可以借鑒一下其它語言是怎麼處理大規模程序設計的,在Java中有一個重要帶概念——package,邏輯上相關的代碼組織到同一個包內,包內是一個相對獨立的王國,不用擔心命名沖突什麼的,那麼外部如果使用呢?直接import對應的package即可
import java.util.ArrayList;
遺憾的是JavaScript在設計時定位原因,沒有提供類似的功能,開發者需要模擬出類似的功能,來隔離、組織復雜的JavaScript代碼,我們稱為模塊化。
一個模塊就是實現特定功能的文件,有了模塊,我們就可以更方便地使用別人的代碼,想要什麼功能,就載入什麼模塊。模塊開發需要遵循一定的規范,各行其是就都亂套了
規范形成的過程是痛苦的,前端的先驅在刀耕火種、茹毛飲血的階段開始,發展到現在初具規模,簡單了解一下這段不凡的歷程
函數封裝
我們在講函數的時候提到,函數一個功能就是實現特定邏輯的一組語句打包,而且JavaScript的作用域就是基於函數的,所以把函數作為模塊化的第一步是很自然的事情,在一個文件裡面編寫幾個相關函數就是最開始的模塊了
function fn1(){
statement
}
function fn2(){
statement
}
這樣在需要的以後夾在函數所在文件,調用函數就可以了
這種做法的缺點很明顯:污染了全局變數,無法保證不與其他模塊發生變數名沖突,而且模塊成員之間沒什麼關系。
對象
為了解決上面問題,對象的寫法應運而生,可以把所有的模塊成員封裝在一個對象中
var myMole = {
var1: 1,
var2: 2,
fn1: function(){
},
fn2: function(){
}
}
這樣我們在希望調用模塊的時候引用對應文件,然後
myMole.fn2();
這樣避免了變數污染,只要保證模塊名唯一即可,同時同一模塊內的成員也有了關系
看似不錯的解決方案,但是也有缺陷,外部可以隨意修改內部成員
myModel.var1 = 100;
這樣就會產生意外的安全問題
立即執行函數
可以通過立即執行函數,來達到隱藏細節的目的
var myMole = (function(){
var var1 = 1;
var var2 = 2;
function fn1(){
}
function fn2(){
}
return {
fn1: fn1,
fn2: fn2
};
})();
這樣在模塊外部無法修改我們沒有暴露出來的變數、函數
上述做法就是我們模塊化的基礎,目前,通行的JavaScript模塊規范主要有兩種:CommonJS和AMD
CommonJS
我們先從CommonJS談起,因為在網頁端沒有模塊化編程只是頁面JavaScript邏輯復雜,但也可以工作下去,在伺服器端卻一定要有模塊,所以雖然JavaScript在web端發展這么多年,第一個流行的模塊化規范卻由伺服器端的JavaScript應用帶來,CommonJS規范是由NodeJS發揚光大,這標志著JavaScript模塊化編程正式登上舞台。
定義模塊
根據CommonJS規范,一個單獨的文件就是一個模塊。每一個模塊都是一個單獨的作用域,也就是說,在該模塊內部定義的變數,無法被其他模塊讀取,除非定義為global對象的屬性
模塊輸出:
模塊只有一個出口,mole.exports對象,我們需要把模塊希望輸出的內容放入該對象
載入模塊:
載入模塊使用require方法,該方法讀取一個文件並執行,返迴文件內部的mole.exports對象
8. 對前端模塊化的理解有哪些
前端模塊化指的是:
1、將一個復雜的程序依據一定的規則(規范)封裝成幾個塊(文件),
並進行組合在一起
2、塊的內部數據與實現是私有的,
只是向外部暴露一些介面(方法)與外部其它模塊通信
說白了就是把常見的工具函數和一些UI組件封裝,可以再後續的開發過程中非常方便的進行調用,這就是前端模塊化