bruce-cli
是一個React/Vue應用自動化構建腳手架,其零配置開箱即用的優勢很是適合入門級、初中級、快速開發項目的前端同窗使用,還可經過建立brucerc.js
文件來覆蓋其默認配置,只需專一業務代碼的編寫無需關注構建代碼的編寫,讓項目結構更簡潔。詳情請戳這裏,使用時記得查看文檔喲,喜歡的能夠給個Starcss
在前端技術的日益壯大下,從之前簡單的幾個文件到如今的一堆文件,各類擴展和工具植入到項目裏,使得項目愈來愈龐大愈來愈難管理,前端項目也所以而趨於工程化和一體化。突飛猛進的前端技術已經讓前端代碼的業務邏輯和交互效果愈來愈複雜,項目會一直維護和迭代,令開發者更加不易於管理。模塊化開發和各類框架把項目分紅若干個小模塊,增長了最後發佈的困難,沒有一個統一的標準,讓前端項目結構千奇百怪。一般的項目都是團隊開發,每一個人的代碼編寫習慣和邏輯編寫風格也很難一致。工做圍繞着開發效率和運行性能的工程化問題是咱們做爲前端開發者必須得處理的問題。所以前端項目自動化構建在整個項目開發中愈來愈重要。前端
本項目是基於
Webpack4.x.x
進行開發的極速零配置開箱即用的Web應用打包工具(每次更新都會保持最新的依賴),集成各類經常使用工具(Handlebars
、Postcss
、Sass
、Less
、Babel
、TypeScript
、Stylelint
、Eslint
、Tslint
等)擴展構建功能,用於構建和管理React/Vue技術棧的項目應用vue
npm i -g bruce-cli
yarn global add bruce-cli
安裝失敗node
npm config set registry https://registry.npm.taobao.org/
npm i -g bruce-cli
或 yarn add global bruce-cli
~ | 命令 | 縮寫 |
---|---|---|
構建項目 | bruce build | bruce b |
初始項目 | bruce init | bruce i |
切換語言 | bruce locale | bruce l |
建立組件 | bruce new | bruce n |
刪除依賴 | bruce remove | bruce r |
命令功能react
內置功能linux
開發環境
、測試環境
、生產環境
三中模式,每種模式對應不一樣的構建配置和優化方案HMR
,配合react-hot-loader
或vue-loader
,增量更新css文件
和js文件
,修哪更哪,無需刷新頁面便可實時看見修改結果,並保存當前狀態管理polyfill
,根據瀏覽器請求時的UserAgent
返回墊片文件,babel
編譯JS代碼時就不帶上墊片進行編譯,起到減包做用
polyfill
,根據browserslist
和編寫代碼中的ES6語法自動插入所需的墊片代碼import().then()
),處理代碼時會單獨分離此模塊,執行頁面對應操做時才加載此模塊,使用才加載不使用則不加載(代碼懶加載
),減小首屏加載代碼大小和渲染時間Postcss
、Sass
、Less
)和JS編譯器(Babel
、TypeScript
)編譯樣式和腳本,開發時可以使用最新或草案規範中的語法,使得代碼更簡潔,提升代碼的可讀性
raw-loader
處理和TXT,把文件內容以字符串的形式導入handlebars-loader
處理內聯HTML和HBS,把HTML元素之內聯的形式插入頁面當中style-loader
和css-loader
處理CSS,把CSS從JS中單獨抽離出來postcss-loader
處理CSS新特性和草案規範,根據browserslist
增長CSS前綴sass-loader
處理Sass,經過node-sass
編譯sass文件
爲css文件
less-loader
處理Less,經過less
編譯less文件
爲css文件
babel-loader
和ts-loader
根據預設環境和browserslist
分別處理編寫的ES6代碼
和TS代碼
,並生成瀏覽器可識別的ES5代碼
CSS校驗
:內置stylelint
,配置標準的CSS語法規則,對開發過程當中出現的語法錯誤進行檢查和糾正JS校驗
:內置eslint
和tslint
,配置標準的JS和TS語法規則,對開發過程當中出現的語法錯誤進行檢查和糾正WebpackRuntime代碼塊
、第三方依賴代碼塊
、公共業務代碼塊
、單個業務代碼塊
減包做用
CSS壓縮
:內置cssnano
,對抽離出來的CSS進行壓縮去重JS壓縮
:內置uglifyjs
和terser
,對抽離出來的JS進行壓縮去重,uglifyjs
用於壓縮ES5
,terser
用於壓縮ES6
圖片壓縮
:內置imagemin
,對png
、jpg
等圖像進行無損壓縮proxy
反向代理服務端接口,解決接口跨域問題file-loader
和url-loader
來處理字體、圖像、音頻、視頻資源Tree Shaking
,禁止babel
把代碼轉換成Commonjs規範
,使用ESM規範
的靜態聲明特色來去除不被引用或不被執行的代碼塊,起到減包做用
brucerc.js
來修改默認配置,構建啓動時就會使用此配置文件來覆蓋默認構建配置err
:錯誤信息default
表示普通應用,react
表示React應用,vue
表示Vue應用)scss、less
)mode
:運行環境(test
表示測試環境,prod
表示生產環境)dir
:輸出路徑mode
:運行環境(test
表示測試環境,prod
表示生產環境)host
:服務器IPpassword
:密碼(不可與privateKey
共存)path
:目標文件路徑privateKey
:祕鑰(不可與password
共存)username
:帳號默認配置webpack
module.exports = {
alias: {},
browserList: [
"last 20 Chrome versions",
"last 20 Firefox versions",
"last 20 Opera versions",
"Explorer >= 11",
"Safari >= 8",
"Android >= 4.4",
"iOS >= 8"
],
errorCb: null,
eslintIgnores: [],
eslintRules: {
// eslint規則配置
// 查看bruce-cli模塊下的temp/configs/eslintrc-{default/react/vue}.json
},
frame: "default",
openPath: "",
proxy: {},
publicPathProd: "",
publicPathTest: "",
style: "scss",
stylelintIgnores: [],
stylelintRules: {
// stylelint規則配置
// 查看bruce-cli模塊下的temp/configs/stylelintrc-{default/react/vue}.json
},
successCb: null,
uploadOpts: null,
useAssetsRelPath: false,
useTs: false
};
複製代碼
覆蓋配置git
.js
的形式編寫文件,可參考如下配置編寫CommonJS規範
來開發,因此必須使用module.exports = { ... };
導出如下配置屬性uploadOpts
設置爲null
或刪除此字段,並使用successCb
來定義上傳操做module.exports = {
alias: {
swiper: "swiper/dist/js/swiper.js"
},
browserList: [
"> 0.5%",
"last 2 versions"
],
errorCb(err) {
console.log("錯誤信息", err);
}
eslintIgnores: [
"src/components/*"
],
eslintRules: {
"space-before-function-paren": ["error", "always"]
},
frame: "react",
openPath: "?abc=123",
proxy: [{
changeOrigin: true,
context: [
"/login",
"/list",
"/detail"
],
secure: false,
target: "https://www.baidu.com"
}],
publicPathProd: "https://www.baidu.com",
publicPathTest: "https://www.baidu.com",
style: "less",
stylelintIgnores: [
"src/assets/css/*"
],
stylelintRules: {
"color-hex-case": "upper"
},
successCb(mode, dir) {
console.log("運行環境", mode);
console.log("輸出路徑", dir);
},
uploadOpts(mode) {
return {
host: "your server ip",
password: "your server password",
path: "/root/www",
username: "root"
};
},
useAssetsRelPath: true,
useTs: true
};
複製代碼
CLI相關github
簡體中文
,如需切換繁體中文
或英文
請執行bruce l
進行切換React
和Vue
的構建配置,請勿用來構建Angular
或其餘MVVM
項目React
應用或Vue
應用才能使用bruce n
命令brucerc.js
的屬性是null
、[]
、{}
時,會使用內置配置默認值IDE相關web
VSCode
進行Stylelint
、Eslint
、Tslint
,須要在IDE上安裝Stylelint插件、Eslint插件、Tslint插件才能配合本項目代碼校驗高亮顯示警告和錯誤Stylelint
高亮顯示語法錯誤和保存時自動修復語法錯誤,可在首選項
>設置
中設定(目前失效)Eslint
高亮顯示語法錯誤和保存時自動修復語法錯誤,可在首選項
>設置
中設定(參考插件文檔)Tslint
高亮顯示語法錯誤和保存時自動修復語法錯誤,可在首選項
>設置
中設定(參考插件文檔)文件相關
.js
或.jsx
,TS項目下腳本文件只能是ts
或tsx
src/index.js|ts|jsx|tsx
src/pages/pageName/index.js|ts|jsx|tsx
vue文件
時,後綴名.vue
不能省略,不然會報錯src/pages
目錄存在且包含子文件夾,則自動識別爲MPA項目
CSS精靈圖
時,必須把圖標統一放到src/assets/icon
下,且文件格式爲png
RUN_ENV
用於獲取當前運行環境,在使用Eslint
或Tslint
的狀況下會報語法錯誤,在後面加上eslint-disable-line
或tslint:disable-line
便可
dev
:開發環境test
:測試環境prod
:生產環境#
:根目錄@
:src
目錄墊片相關
@babel/polyfill
在7.4.0
後被棄用,所以本項目使用的墊片爲core-js
和regenerator-runtime
import "core-js/stable";
和import "regenerator-runtime/runtime";
import "core-js/stable";
和import "regenerator-runtime/runtime";
(core-js
版本必須爲2.x.y
)TS相關
tsconfig.json
tsconfig.json
tslint.json
,手動編寫配置覆蓋默認Tslint配置Default項目相關(
bruce i
初始項目時選擇default
)
handlebars
模板src/index.js
或src/pages/pageName/index.js
src/templates/helpers
目錄下,在模板內使用{{> fileName}}
進行引用src/templates/partials
目錄下,在模板內使用{{fileName param}}
進行引用傳統構建方案
基於Gulp
和Webpack
構建的React項目
,項目代碼分爲構建代碼和業務代碼,項目目錄和文件配置是比較傳統和多人使用的項目搭建方案。整個項目中除去業務代碼後,構建代碼的文件比較多,配置比較分散,比較難集中管理,沒法作到開箱即用,通用性比較低,前期搭建項目構建方案可能花費的時間比較多,項目構建時需依賴本項目存在的依賴模塊才能驅動。對於增刪改構建功能和新同事入門,可能須要花比較多的時間去查找代碼和熟悉構建邏輯
本構建方案
基於Webpack
構建的React項目
,代碼只有業務代碼,構建代碼集中在一塊兒作成一個npm模塊並安裝到全局環境中,經過命令調用本方案來驅動此項目,實現構建代碼和業務代碼徹底分離。開發時無需關注如何寫好構建代碼和使用何種工具擴展構建功能,只需專一於業務代碼的編寫,整個項目只存在業務代碼,可經過配置文件修改默認構建配置,大大節省項目前期準備時間,保證項目的簡潔性、獨立性、高效性、維護性。省去項目前期搭建準備,直接開箱即用,使開發者集中精力寫好業務代碼
方案對比
~ | 傳統構建方案 | 本構建方案 |
---|---|---|
構建文件 | build文件夾 config文件夾 tools文件夾 .browserslistrc .postcssrc .babelrc .stylelintignore .stylelintrc .eslintignore .eslintrc |
無 |
業務文件 | src文件夾 |
src文件夾 |
配置文件 | 無(已集成在構建文件中) | brucerc.js |
基礎文件 | package.json readme.md |
package.json readme.md |
依賴模塊 | Webpack技術棧 (構建) React技術棧 (業務) |
React技術棧 (業務) |
安裝時間 | 較慢 安裝構建和業務代碼依賴的模塊 |
較快 只安裝業務代碼依賴的模塊 |
開發準備 | 編寫webpack和多種工具搭配的構建代碼 | 開箱即用 |
全局使用 | 不能夠 | 能夠 |
構建複用 | 新建文件夾,複製粘貼構建代碼,修改配置文件等 | 執行命令行初始項目和構建項目 |
新手構建 | 需瞭解構建代碼邏輯和配置文件 | 執行命令行 |
後期擴展 | 在原有構建代碼中進行增刪改構建功能 | 經過配置文件brucerc.js 進行增刪改構建功能 |
配置管理 | 分散到不一樣的構建配置文件中 | 集成構建的基礎配置 可經過配置文件 brucerc.js 進行覆蓋 |
MIT © Joway Young
本項目由本人獨自開發,通過2年多的時間沉澱出來,過程當中進行了大量的項目測試和應用,目前上線的項目多達20多個,足能夠支撐本項目的可行性和穩定性。
因爲本身項目開發經驗和技術積累有限,不能保證本項目不存在任何Bug,若是在後續使用本項目時發現Bug或產生疑問,能夠隨時Issues或經過WeChat聯繫我(推薦,下方有二維碼),我會立馬反饋和修復相關Bug。
bruce
或bruce -h
bruce -v
bruce l
cd projectList
bruce i
cd myProject
bruce b
cmd
窗口執行)
bruce n
bruce r
bruce eject
命令,用於開發者自定義bruce-cli
的配置本項目源於我2017年3月份一個Angular項目裏的構建代碼,從最開始的Webpack2
一直迭代到今天的Webpack4
,話說Webpack5
過段時間就要出了。
最初個人構思是寫一份構建代碼模板存放在Github上,而後經過腳本把構建代碼拉下來。但是這樣構建代碼和業務代碼仍是同時存放在一個文件夾裏,不容易管理,文件又多又雜。下次新開項目時又要把構建代碼複製過去,有時升級構建功能,爲了保持構建功能的統一,須要同時修改幾個項目裏的構建代碼,媽的真煩。既然這樣,爲何不把那些通用的構建代碼抽出來作成一個npm模塊呢,這樣一次安裝全局運行,多爽呀!
2018年3月我就開始對這個項目進行升級改造,作成一個npm模塊,只不過一直在本身的電腦裏跑。由於還沒怎樣應用到項目裏,因此也不敢開源。通過差很少1年大大小小20多個項目的應用,終於穩定了這個項目的功能,因此我也決定對bruce-cli
進行開源。對於全部經過bruce-cli
建立的項目均可以開箱即用全部構建功能,如無特殊需求甚至是零配置便可運行項目。
開發這個項目經歷了不少,挖的坑不少,填的坑也不少,很苦很累,有段時間還常常熬夜就是爲了把它作得更好。不過收穫也很大,學習了不少新知識新技能,把經常使用的Node知識都用上了,也爲本身後期作Node服務端開發打下了鞏固的基礎。有付出就有收穫,我仍是一直深信這句話,由於本身確實進步了不少。
本項目是基於Node10
和Node11
進行開發的,爲了兼容Node8+
,因此使用了babel
對源碼進行了編譯,生成如今線上版本的代碼,待更多的項目測試完成和應用起來後會開放源碼供你們一塊兒學習和完善。若是在後續使用本項目時發現Bug或產生疑問,能夠隨時Issues或經過WeChat聯繫我。使用時記得查看文檔喲,詳情請戳這裏,喜歡的能夠給個Star。
原文:請戳這裏
做者:JowayYoung
倉庫:Github
博客:掘金、思否、知乎
公衆號:Uzero
聯繫我:關注公衆號後有個人微信喲
《靈活運用》系列
《依賴彙總》系列
《必備工具》系列
《隨筆》系列
關注公衆號Uzero
,更多前端小乾貨等着你喔!我是JowayYoung
,喜歡分享前端技術和生活紀事,學習與生活不落下,天天進步一點點,與你們相伴成長