2016年3月16日 星期三

webpack初探 part1

        第一個決定學習的javascript框架為React,沒什麼特別的原因,就是想先把React學起來,不過看到FaceBook的Document開頭就傻了:

Using React from npm

We recommend using React with a CommonJS module system like browserify or webpack. Use the react and react-dom npm packages.


        npm還有稍微使用的經驗,但是CommonJS、browserify和webpack又是什麼工具,完全陌生,「工欲善其事,必先利其器。」這回可是活生生的體會了,更何況連學習器具的先決條件都沒有,決定把webpack瞭解一下。

        一般來說,沒有將Javascript的檔案放在模組化管理的話,內嵌在檔案裡的方法會是這樣的:
<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>

         通通包在script的tag裡,我現在用的也是這種方法,常見的問題有:

  1. 在全域的物件上面可能會互相衝突。
  2. 讀取的順序會非常重要。
  3. 開發者必須解決模組或是函式庫的相依問題。
  4. 在開發大項目的時候,script的tag會極長,而且如此一來,非常難以管理。

      再來就是CommonJS的方式,CommonJS用同步的require方法去讀取一個文件,並回傳一個已輸出的對象。而一個模組能用將屬性加到exports物件的方式或者是直接設定一個值到module.exports裡面來指定輸出。

       這是用node.js於伺服器端的流程。

        好處:

  1.  伺服器端的模組可以重複使用。
  2.  目前已經有很多模組在CommonJS的方法裡面(npm)。
  3.  相對簡單
        壞處:
  1. 不太適用在瀏覽器端,伺服器需要讀取的模組都已經存在本地的硬碟裡了,所以載入不用考慮同步或非同步的問題。
  2. 多個模組沒辦法平行要求。
  
       於是於是有了AMD的解決方案。

       AMD可以說是CommonJS的非同步版:

require(["module", "../file"], function(module, file) { /* ... */ });
define("mymodule", ["dep1", "dep2"], function(d1, d2) {
  return someExportedValue;
});


        好處(幾乎就是克服CommonJS的缺口XD):
  1. 可以用非同步的方式在瀏覽器端request。
  2. 平行載入多個模組。
        壞處(也相對了增加CommonJS沒有的劣勢):
  1. 需要經常性的維護,不管是讀或是寫代碼都會難上許多。
  2. 這種方式會感覺很像某種無法根本解決,但是可以透過避開而讓代碼順利運行的狀況。




      PS.感覺變成在翻譯官方文件,不過發現或許以前看文件的時候,漏掉了很多東西。


2016年3月11日 星期五

前言

        寫程式到現在已經半年了,發現功力似乎增長得很慢,思考了一陣子發現癥結點在一直都只用現有的工具想辦法拼出功能來,如果遇到不會的就馬上去google,而不幸的是通常在第一個stackflow的搜尋結果就會找到答案,複製貼上,解決了現有的困難,繼續前進,這時感覺自己完成任務的速度真的是奇快,什麼困難自己都可以解決,無所披敵的感覺。

        但是到了半年後的現在,我回頭一看,發現自己什麼也沒有留下。

        缺乏了思考以及探究解決方法的本質的結果,就會像我一樣,打了很多code,卻是一直原地踏步,就像一直在馬廄裡轉圈的馬一樣,永遠無法真正地踏上遠征之途,意識到了這個嚴重的狀況,我決定要開始經營一個部落格,記錄自己學習新東西的心得。

        如果讀取到任何文章有任何問題或意見,歡迎留言,我會盡力去回覆。