首先拋出一個問題,你們在使用webpack,webpack-dev-server,babel-cli,vue-cli,npm這類工具的時候有沒有思考過一個問題?爲何我全局安裝這個模塊以後,就能在shell中使用webpack,babel這些命令?vue
因而我在shell中敲擊webpack命令,系統就會在環境變量中查找webpack,而後執行link file指向的webpack bin目錄下的webpack.js 文件。接着就能夠順利的執行webpack相關的功能,編譯打包靜態文件........node
那麼讓咱們開始用node寫一個CLI工具!!!webpack
很簡單,到npmjs註冊一個帳號,註冊好以後,到你的項目下git
執行 npm login
,按提示操做便可github
接着 npm publish
,進入你想要發佈的包下,執行該命令便可web
不出意外,就成功發佈了一個npm包vue-cli
重點就是,package.json,bin配置能夠將開發者但願執行的腳本註冊到環境變量,順便把個人腳手架的項目結構po出來,源碼: https://github.com/zhentaoo/p...shell
在執行 npm install -g poke-ball
以後,就能在環境變量中找到link file kk
如圖:
此時當我在shell中敲擊kk的時候,就會執行對應的kk文件,因而就有了接下來的一系列操做.npm
在寫腳手架工具中,容易混亂的一個問題就是路徑,由於操做文件的過程當中,你可能須要把CLI中的模版文件複製到當前項目中。所以就出現了2個路徑
分別是json
process.cwd() 當前工做目錄,也就是你的當前項目的路徑。
__dirname 是執行的源文件的所在路徑,也就是bin文件所在的path,也就是腳手架中的源文件路徑。
seed若是和CLI集成在一塊兒,假如seed須要升級,那麼CLI也不得不升級,全部使用方都不得不從新安裝CLI。能夠把二者拆開。
CLI在new一個seed的時候,使用 git clone,但若是seed版本過多,seed的git倉庫勢必很大.使用git clone --depth 1,只clone最新版本會是個不錯的方案.以後在rm -rf .git