npm包管理工具前端同窗應該不陌生了,npm平臺上有大量的優秀包,咱們只須要簡單幾行命令就能down下來咱們想要的東西,不用處處求種,並且版本控制十分方便。如何將本身的組件或者插件發佈到npm平臺上去,方便項目中使用和其餘人使用,本文介紹如何將一個react組件發佈到npm平臺上去。css
在實際動手以前,先要查閱資料預見困難,分析執行步驟:html
發佈到npm平臺的包,是一個項目工程,跟咱們平時工做中的項目相似,應該有完整的一套構建,開發,測試,打包壓縮等步驟,因此應該把這個包當成一個項目來對待。前端
qj-button ├── example # 存放demo的代碼 │ ├── src │ │ ├── ButtonPage.js │ │ └── index.js # 示例的入口文件 │ └── index.html # 示例頁面 ├── lib # 真實引用編譯過的代碼 │ └── Button.js # 編譯過的源碼 ├── src # 存放源碼的目錄 │ └── Button.js # 組件源碼 ├── style # 樣式文件 │ ├── base.scss │ ├── button.scss │ └── common.scss ├── .bebalrc # babel配置文件 ├── .travis.yml # travis配置文件 ├── index.js # 項目入口文件 ├── style.css # 項目樣式文件 ├── package.json ├── postcss.config.json ├── webpack.config.json # 項目開發demo的時候 須要用到的webpack └── README.md
這裏要注意的點:vue
src
下,原文件用ES6編寫。原文件不可直接使用,須要打包編譯以後才能使用。babel
編譯;使用webpack
編譯。前者只能編譯js,後者則能夠編譯不少類型的文件。我這裏使用的babel
編譯,命令:./node_modules/.bin/babel src --copy-files --source-maps --extensions .js --out-dir lib
將src
目錄下的js文件編譯到lib
目錄下。style.css
;使用webpack
編譯src
文件的時候,將樣式打包編譯到js文件裏。二者區別也很明顯:前者須要手動編譯,也須要手動引入,比較麻煩,可是文件獨立,方便管理;後者自動編譯,樣式擴展性較差。各有取捨。example
文件夾,裏面是項目示例代碼,本地開發的時候跑的項目;也有的包裏面是docs
文件夾,文檔形式介紹。test
文件夾,用於存放測試腳本。項目完成以後,須要添加一個入口文件index.js
,將你的組件導出:node
module.exports = require('./lib/Button'); exports.default = require('./lib/Button');
須要改一下package.json
裏面的配置文件:react
{ "main": "index.js", "style": "style.css", "files": [ "lib" ] }
上述代碼指定入口文件和樣式文件,而且發佈的時候,只發布lib
目錄下文件和其他根目錄的文件,其他的文件夾裏的會傳到github上,並不會被髮布到npm平臺上。webpack
// 不會被npm忽略的文件 package.json README (and its variants) CHANGELOG (and its variants) LICENSE / LICENCE // 必定會忽略的 node_modules .*.swp ._* .DS_Store .git .hg .npmrc .lock-wscript .svn .wafpickle-* config.gypi CVS npm-debug.log
項目已經準備好了,接下來能夠着手發佈了。首先npm上註冊帳號,別忘了去郵箱驗證。而後輸入:git
npm adduser
接下來會以問答的形式向你瞭解你的用戶名、密碼以及公開的郵箱,以後輸入es6
npm publish
而後看到進度條走,以後組件發佈成功,能夠到npm上搜索本身的包了。github
這塊可能會遇到一些報錯,請看這裏。
最後說一下版本管理。
通常來講版本分紅三部分:A.B.C
通常來講你會看到一些項目README.md裏面有一些icon如:
這些icon看起來很牛逼,但也不僅是裝逼用的。
持續集成(Continuous integration)的目的,就是讓產品能夠快速迭代,同時還能保持高質量。它的核心措施是,代碼集成到主幹以前,必須經過自動化測試。只要有一個測試用例失敗,就不能集成。
每一個icon都表示一個功能,這裏很少作介紹,有興趣能夠看看下列文章:
通過上述操做,就能夠完成了向npm平臺發佈一個包的過程,發佈到npm的組件要持續維護。