JS包管理方案,spm3 發布通告
很高興通知各位,更好用的 spm@3.x 及其源服務 spmjs.io 發布了。
緣起
spm 從第一個版本到現在三年了,從 0.x 到 1.x 再到 2.x,定位上從 Sea.js 配套的打包工具到包管理器,已發生了多次大的改變。
相比于 Sea.js 的簡潔通用,spm 的包管理和打包機制一直被社區所詬病(我相信有一萬個issue吐槽過它),甚至或多或少阻礙了整個 CMD 社區的發展,這也和我們做生態圈的想法相悖。(可以參考:spm 的困境)
這些年接觸 nodejs 時,npm 社區的活躍和便利性給我們很大啟發。我們(都)希望在自己的工作中能使用優秀的業界模塊(而不是自己開發,或用公司的破框架重構一個),所以我們有了 Sea.js,有了 spm,有了 Arale,這些前端模塊化的方案和工具都致力于解決一個問題:我們如何可以像 npm 一樣方便的組織和調用模塊,我們如何最小成本地來使用和貢獻業界優秀的模塊,我們如何能給開發者提供通用的前端模塊化解決方案。
spm@2.x 在去年發布之后,對上面的問題做了很多解答。實際上,spm2 解決了大多數問題,它在支付寶和很多第三方企業和個人的項目中良好的運轉,實踐了很多工程問題(比如樣式和模板的集成、內網源)。但是它也有很多問題,比如太多約定,比如暴露給開發者的復雜度,比如不通用……
所以我們需要一個更好的 spm@3.x。( ??_??)?
定位
新的 spm@3.x 從其他包管理方案(browserify、bower、jamjs、component)中汲取了不少優點,在 spm2 的良好基礎上,致力于提供一個開放、通用、完善、集成化的基于瀏覽器模塊生命周期的包管理工具,包括初始化、編碼、本地化調試、文檔生成、發布、依賴管理、單元測試、構建、源服務等等功能。
進化
一起來看看 spm@3.x 都發生了哪些變化:
-
精心設計的 package 規范。
- 去除 family 字段。打通模塊間依賴的壁壘,避免每個 family 下都發布要 jquery 的問題。
- spm.alias 屬性被語義更加明確的 spm.dependencies 屬性代替。
-
添加了 spm.main 屬性,實現了單入口,從而使依賴書寫更加清爽。
原來你需要這么寫:
"alias": { "moment": "gallery/moment/2.6.0/moment" }
現在清晰多了:
</li>"dependencies": { "moment": "2.6.0" }
- 去掉了默認的 src 目錄等約定規則,這樣模塊目錄結構可以像 npm 模塊一樣簡單隨意。
- 新增 buildArgs 字段,用于模塊構建。 </ul> </li>
-
編碼書寫規范從 CMD 規范全面轉向 CommonJS,更加通用和開放,不再需要書寫煩人的
</li>define(function(require, module, exports) {})了,并且可以和 Component 社區進行一定程度的打通。CMD 格式作為調試和上線后的運行時規范繼續存在,但基本上對開發者透明了,我們正在和 CMD 規范告別。 -
新的命令行工具 spm@3.x,我們將原先的功能、常用插件、和在 apm 中實踐出來的通用功能都集成到一起,用于管理一個完整的模塊生命周期,包括初始化,完全的本地化調試,測試,發布,構建,文檔生成和部署等等功能,All in one。比起其他瀏覽器包管理工具,功能更加完善貼心,更瀏覽器,更快(網速:-D)。
</li> -
基于 gulp 的構建工具。(spm build)
- 明顯快于 grunt 方式的構建速度。
- 包管理和構建過程完全分離,源上不存放構建后的代碼,發布前不再需要運行
spm build,構建只作為上線前的必要步驟。 - 簡單通用的配置讓你告別繁瑣的 gruntfile,也不再被各種支付寶潛規則困擾。
- 支持 standalone 的打包方式,無須 Sea.js 環境也可部署使用。
- 依舊支持 css、tpl、handlebars 等特殊模塊的內嵌。 </ul> </li>
-
基于 nodejs 重寫的源服務 spmjs.io,用于代替原來用 python 寫的 yuan,完美適配 spm@3.x,支持 github 登陸和匿名兩種方式,可以很方便部署(適合作為企業級開發的內網源),同時方便了我們的后續維護。我們已部署了一個 spmjs.io 作為通用的全網服務。
</li> -
高端大氣的界面以及……英文文檔!我們要更加國際化。
</li> -
大量細節變化不一一絮述。
</li> </ol>使用
好吧,正式的用起來吧!
安裝
$ npm install spm -g會覆蓋 spm2,需要共存的請參考spm 2, 3 共存方案 。
</blockquote>確保你安裝的是 3.x 版本:
$ spm -V 3.0.x開始試用
直接看官網的上手文檔吧:spmjs.io/documentation
不要擔心英文,這些文檔都是中國人寫的:-D
</blockquote>參與
我們衷心的希望您能一起參與到新版 spm 的開發和使用中來,你可以從以下幾個方面入手:
-
遷移舊的模塊。
如果您在使用老的源服務 https://spmjs.org,建議進行遷移,可以參考遷移文檔 和使用遷移工具。推薦參考已遷移的 Arale 模塊如 Base 的結構。
</li> -
推廣 spm 社區。
由于新的模塊規范通用性和開放性的改變,使我們向國外社區的推廣有了可能。我們已經用
</li>pull request的方式開始向國外的開源項目推廣 spm,目前推廣效果還算不錯,歡迎加入我們的工作。(向開源項目推廣 spm 的匯總) -
發布你的模塊。
如果你有牛逼好用的前端項目,歡迎引入 spm3,把模塊發布到 spmjs.io 上;也可以幫助我們發布一些業界優秀的模塊(目前主要是我們團隊的幾個人在努力的發啊發)。因為去掉了 family,所以 spmjs.io 和 npm 一樣,采用占坑的方式管理模塊,好名字先到先得歡迎搶注(不要濫用哦)。
</li> -
應用。
在您的個人博客和公司項目中使用 spm3 新方案,能用的東西才會是好東西。遇到任何問題或有什么好想法,及時給我們提建議。
</li> </ol>備注
- 舊版的 spm2 的源服務 https://spmjs.org 將和新版的源共存一段時間(預計至少半年),強烈建議老用戶進行遷移。
- 由于 spm2 和 spm3 差異巨大,如果貴公司的文檔里有安裝 spm2 的文檔,請及時修改為
npm install spm@2.x -g。
</ol>
- 命令行工具
- 源服務
- 文檔
- 源服務源碼
- spm@3.0 和 spmjs.org 的未來
- 向開源項目推廣 spm 的匯總
- 遷移 spm2 到 spm3
- spm2、3共存方案 </ul> 來自:https://github.com/spmjs/spm/issues/819
相關鏈接:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
-

