1. 程式人生 > >nodejs快速入門(一)-模組化開發

nodejs快速入門(一)-模組化開發

    隨著網站開發的複雜度越來越高,js程式碼和js檔案的增多,出現了開發者頭疼的兩個問題:① 命名衝突;②檔案依賴。

js模組化開發可以解決這些問題。

   ①變數命令衝突

        在js檔案中,如下建立一個變數並賦予一個函式。如果檔案的程式碼過多,在後續的程式碼中再次使用add變數,就會將原來的add變數覆蓋,就造成了變數的命名衝突。

var add=function(v1,v2){
	return v1+v2;
}

// 此處省略一萬行程式碼

var add = 123;

    我們逐漸試著重程式碼進行改善

    (1)物件封裝 

var calculator={
	num:123;
}
calculator.add=function(v1,v2){
	return v1+v2;
}

    這時候 add的作用範圍在caculator物件中,就不會避免後續程式碼直接寫 var add = value 造成變數命名衝入。但是這樣的程式碼還是有很大的侷限性,物件裡面的屬性和方法很容易被修改掉,很不安全。

    (2)劃分私有名稱空間

var calculator=(function(){
	var num=123;
	var add=function(v1,v2){
		return v1+v2;
	};

	return {
		num:num,
		add:add
	}
})()

    通過匿名函式,閉包將add的私有化到calculator中,可以保護好裡面的屬性和方法,但是這種方式的侷限在於不能維護和擴充套件功能。

    (3)開閉原則-維護擴充套件

var calculator=(function(){
	var num=123;
	var add=function(v1,v2){
		return v1+v2;
	};

	return {
	num:num,
	add:add
	}
})();

var calculator=(function(global){
	global.mod=function(v1,v2){
		return v1%v2;
	}
	return global;
})(window.calculator||{});

    對add的修改關閉了,同時提供了對calculator的功能擴充套件,window.caucluator傳遞就是為了打破封裝性。

②檔案依賴

        在開發js程式碼的過程中,例如使用了jquery.js,就需要通過<script src="./jquery.js"></script>的形式引入檔案,形成硬編碼。如以下程式碼

var calculator=(function(){
	var num=123;
	var add=function(v1,v2){
		return v1+v2;
	};

	return {
	num:num,
	add:add
	}
})();

var calculator=(function(global){
	global.mod=function(v1,v2){
		return $(v1) % $(v2); // 這裡使用了jquery的$
	}
	return global;
})(window.calculator||{});

根據以上問題,引入模組化開發

模組化規範

       ①伺服器端規範

               

                nodejs就是遵循了CommonJS規範。

        ②瀏覽器端規範

                

                   RequireJS遵循AMD規範。

                    

                    SeaJS遵循CMD規範。

這裡先介紹SeaJS Demo

    index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SeaJS Demo</title>
    <script type="text/javascript" src="./modules/seajs/2.2.0/sea.js"></script>
</head>
<body>
<input type="" name="" value="1" id="v1">
<input type="" name="" value="2" id="v2">
    
</body>
    <script type="text/javascript">
     seajs.use('./modules/calculator',function(cal){ // 引數1:引入模組路徑;引數2:回撥函式
         console.log(cal.add2());

     });
    </script>
</html>

在index.js的同級目錄modules中,建立如下檔案

    calculator.js

define(function(require,exports,module) {
  var operator = require('./add');
 
  exports.add=operator.add;
  exports.add2=operator.add2;
});

    add.js

define(function(require,exports,module) {
 var add=function(v1,v2){
   return v1+v2;
 }
 $=require('./jquery.js');
  var add2=function(){
      var v1= $('#v1').val();
      var v2= $('#v2').val();
   return (v1-0)+(v2-0);
 }
 
	exports.add=add;
	exports.add2=add2;
});

 檔案目錄

    (1)define是SeaJS的全域性函式,定義模組。

    (2)modules是一個全域性變數相當於 瀏覽器解析dom 的window物件。

    (3)exports是modules.exports的屬性物件別名;不能直接給exports賦值,暴露單個屬性和方法直接給module.exports賦值。exports提供多個屬性和方法向外暴露。

    (4)seajs.user()函式啟動模組;

    (5)require() 用於載入模組。

        模組化開發保證了複合“單一職責”設計,通過匿名函式的注入,保證了模組的獨立性,而且也能清晰的表達模組之間的依賴。這裡簡單介紹SeaJS,如果需要知道更多,訪問http://www.zhangxinxu.com/sp/seajs/ 

相關推薦

nodejs快速入門-模組開發

    隨著網站開發的複雜度越來越高,js程式碼和js檔案的增多,出現了開發者頭疼的兩個問題:① 命名衝突;②檔案依賴。js模組化開發可以解決這些問題。   ①變數命令衝突        在js檔案中,如下建立一個變數並賦予一個函式。如果檔案的程式碼過多,在後續的程式碼中再次

Kotlin快速入門基礎

一個表 range fix font 有一個 get() nta 兼容 des Kotlin快速入門(一)基礎 Kotlin學習筆記,主要記錄與Java不同的地方。 1 基本類型 1.1 數字 1)數字沒有隱式擴寬轉換 val b: Byte = 1 // OK, 字面值

開源性能測試工具JMeter快速入門

正則表達 特殊 返回 預編譯 提取 檢查 blog 1.4 組織 目錄一、JMeter簡介二、JMeter功能介紹三、JMeter腳本四、關於JMeter小提示一、JMeter簡介1.定義JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟件做壓力測試,

全棧開發之HTML快速入門

ack enter 提示 其他 red tle 顯示圖片 val password 一、HTML 是什麽? HTML 指的是超文本標記語言 (Hyper Text Markup Language) HTML 不是一種編程語言,而是一種標記語言 (markup lan

spring-data-jpa快速入門——

快速 span ron blank support bubuko body lan -s 一、概述   官網:https://projects.spring.io/spring-data-jpa/   1.什麽是spring-data-jpa   Spring D

筆記50 Mybatis快速入門

play ati driver 多個 目錄 自動 name 定制化 png 一、Mybatis簡介   MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBa

筆記61 Spring Boot快速入門

user demo model 前端 req oot 項目 htm 顯示 IDEA+Spring Boot快速搭建 一、IDEA創建項目 略 項目創建成功後在resources包下,屬性文件application.properties中,把數據庫連接屬性加上,同時可以設置服

區塊鏈快速入門——區塊鏈簡介

更多 目前 驗證 action 依賴 無法解析 得到 分析 管理 區塊鏈快速入門(一)——區塊鏈簡介 一、區塊鏈簡介 1、分布式記帳技術簡介 2009年1月,基於區塊鏈結構的比特幣網絡悄然問世,其融合了現代密碼學和分布式網絡技術等重要成果。在比特幣出現後的數年裏,在純分布式

01 React快速入門——使用迴圈時對於‘key’報錯處理

問題描述:       在剛開始接觸react學習的時候,編寫一個小功能時,使用了map來迴圈一個數組中的資料,輸出到前端頁面,程式碼除錯執行後正常顯示,但是開啟控制檯卻發現有一條關於“key”的報錯訊息,詳細資訊如下:     &

numpy快速入門

numpy快速入門(一) 原文連結 NUMPY簡介 NumPy是使用Python進行科學計算的基礎包。它包含如下內容: 一個強大的N維陣列物件 複雜的(廣播)功能 用於整合C / C ++和Fortran程式碼的工具 有用的線性代數,傅立葉變換和隨機數功能 除了明顯的科學用途外,

vue快速入門

vue是什麼? 是一個漸進式框架,什麼是漸進式?漸進式框架,入手簡單,引入js,很快上手達到效果,使用元件,甚至整個框架都可以慢慢用元件來搭建。由小到大,專注於每個小元件,拼拼和和成一個大的模組。 MVVM: M: V VM

XML Schema快速入門

目錄   XML Schema的作用是什麼? 要不要學XML Schema技術? XML Schema難不難學?  XML Schema文件快速書寫(語法我們將會在例子中介紹) 1 首先我們也需要對XML Schema文件進行宣告(版本宣告、編碼宣告、獨立

python 快速入門

一. 安裝 下載python安裝包,https://www.python.org/downloads/ 二. 變數和簡單資料型別 ####1.變數 message = "Hello Python world!" print(message) #Hello Python wo

Spring Boot 2.0 WebFlux 上手系列課程:快速入門

02:WebFlux 快速入門實踐 Spring Boot 2.0 spring.io 官網有句醒目的話是: BUILD ANYTHING WITH SPRING BOOT Spring Boot (Boot 顧名思義,是引導的意思)框架是用於簡

新版OpenGL學習入門——初始視窗

主要用來記錄一下學習程式碼,每次新建一個專案還要配置太麻煩啦 配置網址:https://blog.csdn.net/qq_19003345/article/details/76098781  學習的是可編輯管線,不過順便也配置了一下舊版本的,這樣可以偶爾執行一下別人的程式碼 題

Mac下CMakeLists.txt檔案的使用快速入門

在用Cmake編譯檔案,發現需要自己動手寫CMakeLists.txt檔案,簡單研究了下,記錄如下: 一、介紹 CMake是一種跨平臺編譯工具,比make更為高階,使用起來要方便得多。CMake主要是編寫CMakeLists.txt檔案,然後用cmake命令將CMakeL

gRPC快速入門——Protobuf簡介

gRPC快速入門(一)——Protobuf簡介 一、Protobuf簡介 1、Protobuf簡介 Protobuf即Protocol Buffers,是Google公司開發的一種跨語言和平臺的序列化資料結構的方式,是一個靈活的、高效的用於序列化資料的協議。與XML和JSON格式相比,protobuf更

Swift快速入門第一個Swift程式

1. 本系列說明 本系列只是一個Swift快速入門的教程,並沒有詳盡的介紹Swift,Swift也並不是一個簡單的程式語言,所以要想詳盡的系統的學習Swift,本系列並不適合你,此係列只是讓開發者可以快速的用Swift來進行開發。另外學習本系列並不需要obj-

【原創】Spring-Cloud快速入門微服務入門--轉載請註明出處

一、什麼是微服務? 有時候,會有的人存在誤解,所謂微服務就是SpringCloud。這種思想本身是不正確的,微服務是一種系統架構上面的設計風格,而SpringCloud則是一種較為適用於微服務架構的框架。 在java體系中,我們通常需要將一個大的類,拆分成若干個的小的類,每個類都具有自己獨立

【原創】Spring-boot快速入門HelloWord!--轉載請註明出處

Spring-boot快速入門(一)HelloWord! 一、Spring-boot簡介 1. Spring-boot介紹 Spring-boot是一款將Spring4.X版本Spring族群進行整合的一款框架,繼承了來自於Spring族群的絕大部分功能,在Spring4.