我写的几个 craco 插件介绍
自己写的几个 craco 插件,记录一下用法,用途
插件列表
插件名称 | 用途 |
---|---|
craco-plugin-alias | 对应于 webpack 自身的 alias,自带了 '@': path.join(dirname, 'src') |
craco-plugin-banner | 在HTML头上以注释方式添加一些 build_time 等信息 |
craco-plugin-bundle-analyzer | 当ENV中存在 BUNDLE_ANALYZER=true 时生效 |
craco-plugin-debug | 可以打印出 craco 当前的配置信息 |
craco-plugin-dll-refs | 当 webpack-dll-cli 应用时,对应 js 部分的 reference 的引入 |
craco-plugin-dll-refs-sass | 当 webpack-dll-cli 应用时,对应 css 部分的 reference 的引入 |
craco-plugin-environment |
|
craco-plugin-offline | 利用 offline 插件,完成 serviceWorker 的集成 |
craco-plugin-spa-base | 自己常用 spa 应用的配置,有 @ + View 的配置; 需要 npm i classnames 支持 |
craco-plugin-speed-measure | 可以统计打包消耗时长(webpack4下使用,webpack5目前有bug) |
craco-plugin-styled-components | 关于 styled-components 的一些开发优化,方便 debug; babel/namespace等功能的配置 |
craco-plugin-styled-extension | 对于 styled-components 的一些功能扩展,如 rgba/lighten/darken函数的扩展 |
一键安装
npm i -D @jswork/craco-plugin-alias
npm i -D @jswork/craco-plugin-banner
npm i -D @jswork/craco-plugin-bundle-analyzer
npm i -D @jswork/craco-plugin-debug
npm i -D @jswork/craco-plugin-dll-refs
npm i -D @jswork/craco-plugin-dll-refs-sass
npm i -D @jswork/craco-plugin-environment
npm i -D @jswork/craco-plugin-offline
npm i -D @jswork/craco-plugin-spa-base
npm i -D @jswork/craco-plugin-speed-measure
npm i -D @jswork/craco-plugin-styled-components
对绝对路径 @ 的支持
import ReactDOM from 'react-dom';
import '@/shared/nx';
import '@/assets/styles/index.scss';
import reportWebVitals from './reportWebVitals';
import App from './app';
ReactDOM.render(<App />, document.getElementById('root'));
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
styled的使用
- 不用引用
styled
- 可以使用
rgba
函数,像sass
一样的感觉 - 在Chrome的Element面板,有
LoginContainer
相关class,方便定位组件
# styled
npm install styled-components
npm install @types/styled-components --save-dev
# extension
npm i @jswork/color-rgba @jswork/color-lighten @jswork/color-darken
export const LoginFooter = styled.footer`
font-size: 14px;
color: ${rgba('#fff', 0.8)};
position: absolute;
bottom: 24px;
width: 100%;
text-align: center;
`;
关于 craco-plugin-dll-refs
使用过程与 HMR 冲突的解决方案
冲突原因: new webpack.DllReferencePlugin 使用的时候,会造成 HMR 无法正常更新。
更精确的原因,暂时还没有定位到。
# 组合1: HRM + disabled dll-refs
# 特点: 启动慢,但支持HMR,开发体验更好<默认为true,所以这个也不用写>
FAST_REFRESH = true
# craco.config.js<options: 默认可以不写>
{ plugin: dllRefs, options: {inject: false} }
## 组合2: refresh + enable dll-refs
# 特点: 启动快,但不支持HMR,对于表单应用体验有点差,但问题较少,占内存较大
FAST_REFRESH = false
# craco.config.js
{ plugin: dllRefs, options: { inject: true } }
craco-plugin-speed-measure 与 PUBLIC_URL
的问题
这个插件,使用的时候会造成, "%PUBLIC_URL% 未编译成正常的配置;
所以,这个插件,正常时间应该是关闭状态,只有需要分析打包性能的时候才会打开使用
在 styled 实现 foreach 的效果
import styled from 'styled-components';
export const STATUS_COLORS = [
{ label: 'Relative', status: 'relative', color: ['#03DCA4', '#D6D6D6'] },
{ label: 'Neutral', status: 'neutral', color: ['#F9F9F9', '#D6D6D6'] },
{ label: 'Positive', status: 'positive', color: ['#FF8886', '#D6D6D6'] },
{ label: 'Important', status: 'important', color: ['#FFCE00', '#FFFFFF'] },
{ label: 'Domain', status: 'domain', color: ['#1890FF3D', '#1890FF3D'] },
];
const Container = styled.div`
${STATUS_COLORS.map(
(item) =>
`&[data-status='${item.status}'] { > i { background: ${item.color[0]}; border-color: ${item.color[1]}; }`
)}
`;
export default (props) => {
return <Container>Legend</Container>;
};