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
,喜欢分享前端技术和生活纪事,学习与生活不落下,天天进步一点点,与你们相伴成长