JS包管理方案,spm3 發布通告

jopen 11年前發布 | 33K 次閱讀 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 的良好基礎上,致力于提供一個開放、通用、完善、集成化的基于瀏覽器模塊生命周期的包管理工具,包括初始化、編碼、本地化調試、文檔生成、發布、依賴管理、單元測試、構建、源服務等等功能。

p1.png

進化

一起來看看 spm@3.x 都發生了哪些變化:

  1. 精心設計的 package 規范。

    • 去除 family 字段。打通模塊間依賴的壁壘,避免每個 family 下都發布要 jquery 的問題。
    • spm.alias 屬性被語義更加明確的 spm.dependencies 屬性代替。
    • 添加了 spm.main 屬性,實現了單入口,從而使依賴書寫更加清爽。

      原來你需要這么寫:

      "alias": {   "moment": "gallery/moment/2.6.0/moment" } 

      現在清晰多了:

      "dependencies": {   "moment": "2.6.0" } 
      </li>

    • 去掉了默認的 src 目錄等約定規則,這樣模塊目錄結構可以像 npm 模塊一樣簡單隨意。
    • 新增 buildArgs 字段,用于模塊構建。
    • </ul> </li>

    • 編碼書寫規范從 CMD 規范全面轉向 CommonJS,更加通用和開放,不再需要書寫煩人的 define(function(require, module, exports) {})了,并且可以和 Component 社區進行一定程度的打通。CMD 格式作為調試和上線后的運行時規范繼續存在,但基本上對開發者透明了,我們正在和 CMD 規范告別

      </li>

    • 新的命令行工具 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>

      • 高端大氣的界面以及……英文文檔!我們要更加國際化。

        p2.png

        </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 的開發和使用中來,你可以從以下幾個方面入手:

        1. 遷移舊的模塊。

          如果您在使用老的源服務 https://spmjs.org,建議進行遷移,可以參考遷移文檔 和使用遷移工具。推薦參考已遷移的 Arale 模塊如 Base 的結構。

          </li>

        2. 推廣 spm 社區。

          由于新的模塊規范通用性和開放性的改變,使我們向國外社區的推廣有了可能。我們已經用 pull request 的方式開始向國外的開源項目推廣 spm,目前推廣效果還算不錯,歡迎加入我們的工作。(向開源項目推廣 spm 的匯總

          </li>

        3. 發布你的模塊。

          如果你有牛逼好用的前端項目,歡迎引入 spm3,把模塊發布到 spmjs.io 上;也可以幫助我們發布一些業界優秀的模塊(目前主要是我們團隊的幾個人在努力的發啊發)。因為去掉了 family,所以 spmjs.io 和 npm 一樣,采用占坑的方式管理模塊,好名字先到先得歡迎搶注(不要濫用哦)。

          </li>

        4. 應用。

          在您的個人博客和公司項目中使用 spm3 新方案,能用的東西才會是好東西。遇到任何問題或有什么好想法,及時給我們提建議

          </li> </ol>

          備注

          1. 舊版的 spm2 的源服務 https://spmjs.org 將和新版的源共存一段時間(預計至少半年),強烈建議老用戶進行遷移。
          2. 由于 spm2 和 spm3 差異巨大,如果貴公司的文檔里有安裝 spm2 的文檔,請及時修改為npm install spm@2.x -g
          3. </ol>

            相關鏈接: