不可變數據一旦建立就不能改變,這樣可簡化應用開發、無防護複製、啓用更先進的內存方案,以及使用更簡單的邏輯檢查更新。持久化數據提供可修改的API,這些API不在原地更新數據,而是產生新的更新後的數據。node
Immutable.js提供了不少持久化不可變數據結構,包括: List, Stack, Map, OrderedMap, Set, OrderedSet以及Record。git
這些數據結構在現代JavaScript虛擬機都很是高效的,使用的是經過hash映射以及向量嘗試,和Clojure和Scala中流行的那些同樣,最小化須要拷貝和緩存的數據。github
Immutable.js也提供了惰性Seq, 容許有效的方法鏈式操做,例如map和filter,不用建立中介變量。使用Range和Repeat建立一些Seq。typescript
更多的信息,可參閱Immutable.js官網。npm
以上是從官網上翻譯過來的一段描述文字。下面將從代碼的層面進行簡單剖析。json
源碼地址爲:https://github.com/facebook/i...。 對於JavaScript包來講,首先咱們能夠先看看package.json文件,看看構建相關的腳本命令以及作了哪些操做。gulp
... "main": "dist/immutable.js", "typings": "dist/immutable-nonambient.d.ts", "typescript": { "definition": "dist/immutable.d.ts" }, "scripts": { "build": "run-s build:*", "build:dist": "run-s clean:dist bundle:dist copy:dist stats:dist", "build:pages": "gulp --gulpfile gulpfile.js default", "stats:dist": "node ./resources/dist-stats.js", "clean:dist": "rimraf dist", "bundle:dist": "rollup -c ./resources/rollup-config.js", ...
經過npm install immutable安裝這個包以後,咱們在引入這個包的時候,實際上定位的文件是dist/immutable.js, 若是使用TypeScript定義信息,對應於dist/immutable.d.ts。segmentfault
而後看看scripts部分,能夠看到build是構建目標代碼的命令, 這裏使用了run-s build:*。緩存
這裏咱們使用的是npm-run-all。 這裏咱們只須要知道,這個命令能夠並行或串行的運行一系列的npm腳本就好了。 更詳細的介紹,直接進它裏邊的github頁面進行查看便可。數據結構
npm run build執行三件事,打包源代碼到dist/immutable.js中, 複製TS定義到dist/immutable.t.ds, 最後還作了dist-stats。
其中構建目標代碼這塊使用的rollup打包工具實現的, 暫時不深刻rollup的詳細信息, 感興趣的能夠參考後面的鏈接。
這裏咱們是將src中的源代碼Immutable.js打包到dist/immutable.js中去。
+-- utils 工具包 |-- Collection.js Collection數據結構 |-- CollectionImpl.js |-- Hash.js |-- Immutable.js 該包的主文件 |-- Iterator.js |-- List.js |-- Map.js |-- Math.js |-- Operations.js |-- OrderedMap.js |-- OrderedSet.js |-- Predicates.js |-- Range.js |-- Record.js |-- Repeat.js |-- Seq.js |-- Set.js |-- Stack.js |-- TrieUtils.js |-- fromJS.js |-- is.js