@erpsquad/common

中文文档
1.11.28发布于 2026/11/12MITTypeScriptESM + CJS近 30 天下载 3.7万

Shared UI component library for ERP modules

原始使用文档
文档目录63 节
  1. 🚀 Features
  2. ⚡ Performance & Deep Imports
  3. Deep Imports (Recommended)
  4. Performance Benefits
  5. Quick Start with Deep Imports
  6. Development Environment
  7. Production Deployment
  8. 📦 Installation
  9. Peer Dependencies
  10. 🎯 Quick Start
  11. ⚠️ IMPORTANT: Import Styles
  12. ⚡ Performance Best Practice
  13. Core Usage (Minimal dependencies)
  14. Available Core Exports
  15. Full Usage (With peer dependencies)
  16. With Custom Theme
  17. 🎨 Theme System
  18. Theme Configuration
  19. Custom Theme Object
  20. Available Colors
  21. 🎨 Styles & SCSS
  22. Import Compiled CSS (Recommended)
  23. Using Utility Classes
  24. Using SCSS Variables (Advanced)
  25. Using SCSS Mixins (Advanced)
  26. Import All SCSS Features
  27. 📁 Modular Import System
  28. 🔌 API Clients
  29. 🔧 Components
  30. Form Controls
  31. Data Display
  32. Navigation
  33. Feedback
  34. 🔄 Redux Integration
  35. With Redux (Recommended for complex applications)
  36. Without Redux (Simpler applications)
  37. Available Redux Slices
  38. 🪝 Hooks
  39. Custom Hooks
  40. Redux Integration Hook
  41. 🛠️ Utilities
  42. Common Utilities
  43. 🌐 Internationalization
  44. Language Provider
  45. Using Translations
  46. 🧪 Testing
  47. 📚 API Reference
  48. ERPUIProvider Props
  49. Component Props
  50. 🔧 Development
  51. Building the Library
  52. Running Tests
  53. Package Validation
  54. 📈 Bundle Analysis
  55. 🚨 Troubleshooting
  56. Common Issues
  57. Getting Help
  58. 🤝 Contributing
  59. Development Guidelines
  60. 📄 License
  61. 🆘 Support
  62. 📚 Performance Documentation
  63. 📋 Changelog

@erpsquad/common

A comprehensive React component library for ERP applications, built with Material-UI and TypeScript. This library provides 100+ reusable UI components, theming system, utilities, hooks, and optional Redux integration for building modern ERP applications.

🚀 Features

  • 100+ UI Components: Comprehensive set of form controls, data display, navigation, and layout components
  • Material-UI Integration: Built on top of Material-UI with custom theming
  • TypeScript Support: Full TypeScript definitions for all components and utilities
  • Flexible Redux Integration: Optional Redux support - components work with or without Redux
  • Theme System: Light/dark themes with RTL/LTR support and customizable colors
  • Internationalization: Built-in i18n support with language switching
  • ⚡ Optimized Performance: 90%+ bundle size reduction with modular imports and tree-shaking
  • 📦 Smart Code Splitting: Automatic chunking for heavy dependencies
  • 🚀 Fast Load Times: 75-90% faster with optimized build configuration
  • Accessibility: WCAG compliant components with proper ARIA attributes
  • Modular Architecture: Import only what you need to minimize bundle size
  • Peer Dependency Management: Flexible dependency management for different project setups

⚡ Performance & Deep Imports

New in v1.9.98+: Full deep imports support for maximum performance!

Import only what you need for optimal bundle size:

// ✅ Deep imports (recommended) - Only ~50-150KB
import { Button } from "@erpsquad/common/components/button";
import { useAuth } from "@erpsquad/common/hooks/useAuth";
import { formatDate } from "@erpsquad/common/utils/dateFormat";

// ❌ Barrel imports (not recommended) - Imports entire library ~2.5MB
import { Button, useAuth, formatDate } from "@erpsquad/common";

Performance Benefits

  • 90-97% smaller bundles with deep imports
  • 75-90% faster load times with optimized code splitting
  • Effective tree-shaking removes unused code automatically
  • 250+ individual entry points for components, hooks, utils, contexts, icons, and views

Before: 2.5MB bundle, 5-8s load time
After: 150-300KB bundle, 1-2s load time

Quick Start with Deep Imports

// Components
import { Button } from "@erpsquad/common/components/button";
import { TextField } from "@erpsquad/common/components/text-field";
import { MaterialTable } from "@erpsquad/common/components/material-table";
import ProtectedRoute from "@erpsquad/common/components/protected-route";

// Hooks
import { useAuth } from "@erpsquad/common/hooks/useAuth";
import { usePermissions } from "@erpsquad/common/hooks/use-permissions";

// Utils
import { formatDate } from "@erpsquad/common/utils/dateFormat";
import { api } from "@erpsquad/common/utils/api";

// Contexts
import { AuthProvider } from "@erpsquad/common/contexts/AuthContext";

📚 See Complete Reference for all 700+ import paths
📋 See Quick Reference for common imports
📖 See Deep Imports Guide for complete documentation

Development Environment

For local development, you can create a .env file in your project root with these variables. Make sure to add .env to your .gitignore file to keep sensitive information secure.

Production Deployment

For production deployments, set these environment variables in your hosting environment's configuration panel.

📦 Installation

npm install @erpsquad/common

Peer Dependencies

The library uses peer dependencies to avoid version conflicts and reduce bundle size. Install the dependencies you need based on your usage:

Required (Core functionality)

npm install react react-dom @mui/material @emotion/react @emotion/styled @mui/icons-material

Optional (Feature-specific)

For Redux integration:

npm install @reduxjs/toolkit react-redux

For date components:

npm install @mui/x-date-pickers date-fns

For data grid components:

npm install @mui/x-data-grid

For routing utilities:

npm install react-router-dom

For internationalization:

npm install react-i18next i18next

For utility functions:

npm install lodash axios

Complete Installation (All features)

# Install all peer dependencies for full functionality
npm install react react-dom @mui/material @emotion/react @emotion/styled @mui/icons-material @reduxjs/toolkit react-redux @mui/x-date-pickers @mui/x-data-grid date-fns react-router-dom react-i18next i18next lodash axios

🎯 Quick Start

⚠️ IMPORTANT: Import Styles

Before using any components, you MUST import the CSS file in your main application file:

// main.tsx or App.tsx or index.tsx
import '@erpsquad/common/style.css'; // 👈 REQUIRED - Import this first!

Without this import, components will render but have no styling.


⚡ Performance Best Practice

Use modular imports for optimal bundle size:

// ✅ Good - Only loads what you need (recommended)
import { Button, TextField } from '@erpsquad/common/components';
import { useAuth } from '@erpsquad/common/hooks';
import { formatDate } from '@erpsquad/common/utils';

// ❌ Avoid - Loads entire library (deprecated in v2.0.0)
import { Button, useAuth, formatDate } from '@erpsquad/common';

Impact: 90%+ bundle size reduction, 75%+ faster load times

📚 See Performance Migration Guide for migration steps


Core Usage (Minimal dependencies)

The library provides core functionality without requiring all peer dependencies:

import React from 'react';
// ⚠️ IMPORTANT: Import styles first (in your main file)
import '@erpsquad/common/style.css';

import {
    configureLibrary,
    getLibraryConfig,
    images,
    DEFAULT_LANG,
    type LibraryConfig
} from '@erpsquad/common';

// Configure library for your application
const config: LibraryConfig = {
    routes: {
        login: '/auth/login',
        dashboard: '/dashboard'
    },
    validation: {
        emailRequired: true,
        phoneRequired: false
    },
    dataTransforms: {
        dateFormat: 'dd/MM/yyyy'
    }
};

configureLibrary(config);

function App() {
    const currentConfig = getLibraryConfig();

    return (
        <div>
            <img src={images.logo} alt='Logo' />
            <p>Default language: {DEFAULT_LANG}</p>
            <p>Login route: {currentConfig.routes?.login}</p>
        </div>
    );
}

export default App;

Available Core Exports

The following exports are available without peer dependencies:

// Configuration system
import {
    configureLibrary,
    getLibraryConfig,
    getConfigFunction,
    type LibraryConfig
} from '@erpsquad/common';

// Static assets
import { default as images } from '@erpsquad/common';

// Constants
import { DEFAULT_LANG, LANGUAGES, S3_BUCKET_URL } from '@erpsquad/common';

// TypeScript types
import type {
    BaseComponentProps,
    ThemeConfig,
    SelectOption,
    TableColumn,
    User,
    Permission
} from '@erpsquad/common';

Full Usage (With peer dependencies)

After installing peer dependencies, you can use all components:

import React from 'react';
// ⚠️ Import styles first!
import '@erpsquad/common/style.css';

// Note: Import from specific paths to avoid dependency issues
import { ERPUIProvider } from '@erpsquad/common/contexts';
import { Button, TextField } from '@erpsquad/common/components';

function App() {
    return (
        <ERPUIProvider>
            <div>
                <TextField label='Name' variant='outlined' />
                <Button variant='contained' color='primary'>
                    Submit
                </Button>
            </div>
        </ERPUIProvider>
    );
}

export default App;

With Custom Theme

import React from 'react';
// ⚠️ Import styles first!
import '@erpsquad/common/style.css';

import { ERPUIProvider } from '@erpsquad/common/contexts';
import { Button } from '@erpsquad/common/components';
import { createLightTheme } from '@erpsquad/common/theme';

function App() {
    const { theme } = createLightTheme('#2196f3', 'ltr');

    return (
        <ERPUIProvider
            theme={theme}
            themeMode='dark'
            primaryColor='#2196f3'
            enableCssBaseline={true}>
            <Button variant='contained'>Dark Theme Button</Button>
        </ERPUIProvider>
    );
}

🎨 Theme System

The library includes a comprehensive theming system with support for light/dark modes, RTL/LTR direction, and custom colors.

Theme Configuration

import { ERPUIProvider } from '@erpsquad/common/contexts';

<ERPUIProvider
    themeMode='light' // 'light' | 'dark'
    primaryColor='#1976d2' // Any valid color
    direction='ltr' // 'ltr' | 'rtl'
    enableCssBaseline={true}>
    <App />
</ERPUIProvider>;

Custom Theme Object

import { createLightTheme, createDarkTheme } from '@erpsquad/common/theme';
import { ERPUIProvider } from '@erpsquad/common/contexts';

// Create custom theme
const { theme } = createLightTheme('#1976d2', 'ltr');

// Or create dark theme
const { darkTheme } = createDarkTheme('#1976d2', 'ltr');

<ERPUIProvider theme={theme}>
    <App />
</ERPUIProvider>;

Available Colors

The library supports various color formats:

  • Hex colors: #1976d2
  • RGB: rgb(25, 118, 210)
  • Color names: blue, red, green
  • Material-UI color objects

🎨 Styles & SCSS

The library provides a comprehensive styling system with compiled CSS, SCSS variables, mixins, utility classes, and animations.

Add this to your main application file:

// main.tsx or App.tsx
import '@erpsquad/common/style.css';

This gives you:

  • All component styles
  • Utility classes for rapid development
  • Responsive styles
  • Animations

Using Utility Classes

<div className="d-flex justify-content-center align-items-center mb-2">
  <h1 className="h2 bold">Welcome</h1>
  <p className="s2 normal text-center">Description text</p>
</div>

Available utility classes:

  • Layout: d-flex, flex-direction-column, justify-content-center, align-items-center
  • Spacing: mb-1, mt-2, p-0, pl-2 (padding/margin utilities)
  • Typography: h1-h5 (headings), s1-s5 (body text), bold, medium, normal
  • Width/Height: w-100, w-50, h-100, vh-100
  • Text Alignment: text-center, text-left, text-right

Using SCSS Variables (Advanced)

Import SCSS variables in your .scss files:

// your-component.scss
@import '@erpsquad/common/styles/variables';

.custom-component {
  background-color: $primary-600;
  color: $neutral-100;
  border: 1px solid $neutral-300;
}

Available color scales (100-1000):

  • $primary-* (green), $neutral-* (gray), $error-* (red)
  • $blue-*, $magenta-*, $olive-*, $green-*, $lightGreen-*

Using SCSS Mixins (Advanced)

// your-component.scss
@import '@erpsquad/common/styles/mixins';

.responsive-layout {
  @include flex(center, space-between, row);
  
  @include media-md {
    flex-direction: column;
  }
}

Available mixins:

  • @include flex($align, $justify, $direction) - Flexbox shorthand
  • @include transition($time, $motion) - Transition shorthand
  • @include center - Absolute center positioning
  • Responsive breakpoints: @include media-sm, @include media-md, @include media-l, etc.

Import All SCSS Features

// For complete access to variables, mixins, utilities, and animations
@import '@erpsquad/common/styles/all';

📚 For detailed styles documentation, see:

📁 Modular Import System

The library uses a modular import system to prevent dependency issues. Import from specific paths based on your needs:

// Core functionality (no peer dependencies required)
import { configureLibrary, images } from '@erpsquad/common';

// Components (requires React, MUI peer dependencies)
import { Button, TextField } from '@erpsquad/common/components';

// Hooks (requires React peer dependencies)
import { useAuth, useLanguage } from '@erpsquad/common/hooks';

// Contexts (requires React peer dependencies)
import { ERPUIProvider, AuthProvider } from '@erpsquad/common/contexts';

// Theme utilities (requires MUI peer dependencies)
import { createLightTheme, createDarkTheme } from '@erpsquad/common/theme';

// Utility functions (may require specific peer dependencies)
import { formatDate, validateEmail } from '@erpsquad/common/utils';

// Redux integration (requires Redux peer dependencies)
import { createLibraryStore, slices } from '@erpsquad/common/redux';

// API clients (requires axios peer dependency)
import { AccountingAPI, InventoryAPI } from '@erpsquad/common/api-client';

// Styles (CSS bundle - recommended)
import '@erpsquad/common/style.css';

// Styles (SCSS imports for advanced usage)
// Import in .scss files only:
// @import '@erpsquad/common/styles/variables';
// @import '@erpsquad/common/styles/mixins';
// @import '@erpsquad/common/styles/all';

🔌 API Clients

The library includes pre-configured API clients for different ERP modules:

import {
    AccountingAPI,
    InventoryAPI,
    ManufacturingAPI,
    PurchaseAPI,
    SalesAPI,
    RentalAPI,
    RbacAPI,
    DriveAPI,
    SystemFeatureAPI
} from '@erpsquad/common/api-client';

// Configure base API client
const baseConfig = {
    baseURL: 'https://api.example.com',
    timeout: 10000,
    headers: {
        'Content-Type': 'application/json'
    }
};

// Use specific API clients
const accountingClient = new AccountingAPI(baseConfig);
const inventoryClient = new InventoryAPI(baseConfig);

// Example usage
const users = await accountingClient.getUsers();
const products = await inventoryClient.getProducts();

🔧 Components

Form Controls

import {
  TextField,
  Select,
  DatePicker,
  Checkbox,
  Radio,
  ToggleSwitch,
  Button
} from '@erpsquad/common/components';

// Text input
<TextField
  label="Email"
  type="email"
  variant="outlined"
  required
/>

// Select dropdown
<Select
  label="Country"
  options={countries}
  value={selectedCountry}
  onChange={handleCountryChange}
/>

// Date picker (requires @mui/x-date-pickers)
<DatePicker
  label="Birth Date"
  value={birthDate}
  onChange={setBirthDate}
/>

Data Display

import {
  MaterialTable,
  Grid,
  CardWrapper,
  Avatar,
  Chip
} from '@erpsquad/common/components';

// Data table (requires @mui/x-data-grid)
<MaterialTable
  columns={columns}
  data={data}
  title="Users"
  options={{
    search: true,
    pagination: true,
    sorting: true
  }}
/>

// Grid layout
<Grid container spacing={2}>
  <Grid item xs={12} md={6}>
    <CardWrapper>Content</CardWrapper>
  </Grid>
</Grid>

Navigation

import {
  Sidebar,
  BreadCrumb,
  Pagination,
  Tabs
} from '@erpsquad/common/components';

// Sidebar navigation
<Sidebar
  items={navigationItems}
  collapsed={isCollapsed}
  onItemClick={handleNavigation}
/>

// Breadcrumb (requires react-router-dom for navigation)
<BreadCrumb
  items={[
    { label: 'Home', href: '/' },
    { label: 'Users', href: '/users' },
    { label: 'Profile' }
  ]}
/>

Feedback

import {
  CustomSnackbar,
  Toast,
  Loader,
  Alert,
  Modal
} from '@erpsquad/common/components';

// Loading indicator
<Loader size="large" text="Loading data..." />

// Alert message
<Alert severity="success" onClose={handleClose}>
  Operation completed successfully!
</Alert>

// Snackbar notification
<CustomSnackbar
  open={isOpen}
  message="Operation completed successfully!"
  severity="success"
  onClose={handleClose}
/>

// Modal dialog
<Modal
  open={isOpen}
  onClose={handleClose}
  title="Confirm Action"
  actions={[
    { label: 'Cancel', onClick: handleClose },
    { label: 'Confirm', onClick: handleConfirm, variant: 'contained' }
  ]}
>
  Are you sure you want to proceed?
</Modal>

🔄 Redux Integration

The library provides flexible Redux integration that works with or without Redux. Requires @reduxjs/toolkit and react-redux peer dependencies.

import { ERPUIProvider } from '@erpsquad/common/contexts';
import {
    createLibraryStore,
    createConfiguredApiClient
} from '@erpsquad/common/redux';
import { ShareModal } from '@erpsquad/common/components';

// Configure API client
const apiClient = createConfiguredApiClient(baseApiClient, () => ({
    authorization: `Bearer ${getAuthToken()}`
}));

// Create store with library slices
const store = createLibraryStore(
    {
        // Your app reducers
        app: appReducer,
        user: userReducer
    },
    apiClient
);

function App() {
    return (
        <ERPUIProvider useRedux={true} reduxStore={store} apiClient={apiClient}>
            <ShareModal useRedux={true} />
        </ERPUIProvider>
    );
}

Without Redux (Simpler applications)

import { ERPUIProvider } from '@erpsquad/common/contexts';
import { ShareModal } from '@erpsquad/common/components';

function App() {
    const [users, setUsers] = useState([]);
    const [loading, setLoading] = useState(false);

    const fetchUsers = async () => {
        setLoading(true);
        try {
            const response = await api.getUsers();
            setUsers(response.data);
        } finally {
            setLoading(false);
        }
    };

    return (
        <ERPUIProvider useRedux={false}>
            <ShareModal
                useRedux={false}
                users={users}
                loading={loading}
                onFetchUsersAndDepartments={fetchUsers}
            />
        </ERPUIProvider>
    );
}

Available Redux Slices

  • shareSlice: User and department data for sharing functionality
  • headerSlice: Language data and current language selection
  • reportsTitleBarSlice: Company data for reports filtering
  • inventoryReportsTitleBarSlice: Inventory-related data for reports

🪝 Hooks

Custom Hooks

import {
    useAuth,
    useLanguage,
    usePermissions,
    usePages,
    useDeepMemo,
    useReduxIntegration
} from '@erpsquad/common/hooks';

// Authentication hook
const { user, isAuthenticated, login, logout } = useAuth();

// Language hook (requires react-i18next)
const { currentLanguage, changeLanguage, t } = useLanguage();

// Permissions hook
const { hasPermission, checkPermission } = usePermissions();

// Deep memoization hook
const memoizedValue = useDeepMemo(() => expensiveCalculation(data), [data]);

Redux Integration Hook

import { useReduxIntegration } from '@erpsquad/common/hooks';

const MyComponent = ({ useRedux, ...props }) => {
    const { data, loading, error, actions } = useReduxIntegration({
        useRedux,
        sliceName: 'share',
        fallbackData: props.users,
        fallbackLoading: props.loading,
        fallbackActions: {
            fetchData: props.onFetchUsers
        }
    });

    // Component logic using unified interface
};

🛠️ Utilities

Common Utilities

import {
    formatDate,
    formatFileSize,
    formatText,
    deformatText,
    colorUtils
} from '@erpsquad/common/utils';

// Date formatting (requires date-fns)
const formattedDate = formatDate(new Date(), 'dd/MM/yyyy');

// File size formatting
const fileSize = formatFileSize(1024000); // "1.02 MB"

// Text formatting
const formatted = formatText('hello world', 'title'); // "Hello World"

// Color utilities
const hexColor = colorUtils.rgbToHex(255, 0, 0); // "#ff0000"

🌐 Internationalization

Requires react-i18next and i18next peer dependencies.

Language Provider

import { ERPUIProvider } from '@erpsquad/common/contexts';

<ERPUIProvider
    enableLanguage={true}
    // Other props
>
    <App />
</ERPUIProvider>;

Using Translations

import { useLanguage } from '@erpsquad/common/hooks';

const MyComponent = () => {
    const { t, currentLanguage, changeLanguage } = useLanguage();

    return (
        <div>
            <p>{t('common.welcome')}</p>
            <button onClick={() => changeLanguage('es')}>Switch to Spanish</button>
        </div>
    );
};

🧪 Testing

The library includes comprehensive testing utilities:

import { render, screen } from '@testing-library/react';
import { ERPUIProvider } from '@erpsquad/common/contexts';
import { Button } from '@erpsquad/common/components';

test('renders button correctly', () => {
    render(
        <ERPUIProvider>
            <Button>Click me</Button>
        </ERPUIProvider>
    );

    expect(screen.getByRole('button')).toBeInTheDocument();
});

📚 API Reference

ERPUIProvider Props

PropTypeDefaultDescription
useReduxbooleanfalseEnable Redux integration
reduxStoreStoreundefinedCustom Redux store
apiClientApiClientConfigundefinedAPI client configuration
themeMode'light' | 'dark''light'Theme mode
primaryColorstringundefinedPrimary theme color
direction'ltr' | 'rtl''ltr'Text direction
enableAuthbooleantrueEnable auth context
enableLanguagebooleantrueEnable language context
enableRouterbooleanfalseEnable router provider
enableSnackbarbooleantrueEnable snackbar provider

Component Props

All components extend their respective Material-UI component props with additional ERP-specific functionality. Refer to individual component documentation for detailed prop information.

🔧 Development

Building the Library

# Production build
npm run build

# Build with analysis
npm run build:analyze

# Build with validation
npm run build:validate

# Clean build artifacts
npm run clean

Running Tests

# Run all tests
npm test

# Run tests in CI mode
npm run test:ci

# Type checking
npm run type-check

# Linting
npm run lint
npm run lint:fix

Package Validation

# Validate package structure
npm run validate:package

# Check bundle size limits
npm run size-check

# Full validation (lint + type-check + test + build)
npm run validate

📈 Bundle Analysis

# Analyze bundle size and composition
npm run build:analyze

# Check size limits against configuration
npm run size-check

# Validate package contents before publishing
npm run validate:package

🚨 Troubleshooting

Common Issues

⚠️ Components Have No Styling

Problem: Components render but have no styling / look unstyled.

Solution: You MUST import the CSS file in your application:

// In your main file (main.tsx, App.tsx, or index.tsx)
import '@erpsquad/common/style.css'; // 👈 Add this!

// Then import components
import { Button } from '@erpsquad/common/components';

Why: Component styles are bundled separately for optimal tree-shaking and loading performance. The CSS file must be explicitly imported once in your application entry point.

Import Errors

# Error: Cannot resolve '@erpsquad/common/components'
# Solution: Install required peer dependencies
npm install @mui/material @emotion/react @emotion/styled

# Error: Module not found
# Solution: Use correct import paths
import { Button } from '@erpsquad/common/components'; // ✅ Correct
import { Button } from '@erpsquad/common'; // ❌ Incorrect for components

Peer Dependency Warnings

# Warning: peer dependency not installed
# Solution: Install the specific peer dependency
npm install react-redux @reduxjs/toolkit

# Or install all peer dependencies
npm install react react-dom @mui/material @emotion/react @emotion/styled @mui/icons-material

TypeScript Errors

# Error: Cannot find type definitions
# Solution: Ensure TypeScript types are properly imported
import type { LibraryConfig } from '@erpsquad/common';

# Error: Module has no exported member
# Solution: Check if the export requires peer dependencies
import { useAuth } from '@erpsquad/common/hooks'; // Requires React

Build Issues

# Error: Module not found during build
# Solution: Check if all peer dependencies are installed
# and properly configured in your build tool

# For Vite projects, add to vite.config.ts:
export default defineConfig({
  optimizeDeps: {
    include: ['@erpsquad/common']
  }
});

# For Webpack projects, ensure proper externals configuration

Getting Help

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/new-component
  3. Make your changes and add tests
  4. Run tests: npm test
  5. Run linting: npm run lint
  6. Commit your changes: git commit -m 'Add new component'
  7. Push to the branch: git push origin feature/new-component
  8. Submit a pull request

Development Guidelines

  • Follow TypeScript best practices
  • Write comprehensive tests for new components
  • Update documentation for API changes
  • Ensure accessibility compliance
  • Maintain backward compatibility

📄 License

MIT License - see the LICENSE file for details.

🆘 Support

📚 Performance Documentation

📋 Changelog

See CHANGELOG.md for a detailed list of changes and version history.

版本与发布记录

@erpsquad/common 共发布 540 个版本,首次发布于 2025/11/06;过去 12 个月发布了 520 个版本。

版本发布日期距今
1.11.28latest2026/11/121 天前
1.11.272026/11/067 天前
1.0.1-ace-test2026/11/049 天前
1.11.262026/10/3014 天前
1.0.0-ace-test2026/10/2915 天前
1.11.252026/10/2915 天前

关于 @erpsquad/common 的常见问题

@erpsquad/common 是什么?

Shared UI component library for ERP modules

如何安装 @erpsquad/common?

在项目目录运行 npm install @erpsquad/common,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:yup(^1.7.1)、sass(^1.69.5)、axios(^1.0.0)、dayjs(^1.11.10)、jspdf(^2.5.2)、react(^18.2.0 || ^19.0.0)、lodash(^4.17.21)、marked(^12.0.0)、i18next(^23.7.11)、@mui/lab(^5.0.0-alpha.165)、notistack(^3.0.1)、papaparse(^5.4.1)、react-dom(^18.2.0 || ^19.0.0)、file-saver(^2.0.5)、react-redux(^8.1.0 || ^9.0.0)、react-to-pdf(^1.0.1)、@mui/material(^5.15.0)、react-i18next(^13.5.0)、@emotion/react(^11.0.0)、@emotion/styled(^11.0.0)、react-hook-form(^7.58.1)、react-hot-toast(^2.4.1)、@reduxjs/toolkit(^1.9.0 || ^2.0.0)、react-date-range(^2.0.1)、react-doc-viewer(^0.1.14)、react-router-dom(^6.21.0)、libphonenumber-js(^1.11.11)、react-file-viewer(^1.2.1)、react-grid-layout(^1.4.4)、react-helmet-async(^2.0.4)、@hookform/resolvers(^3.10.0)、@mui/icons-material(^5.15.0)、@mui/x-date-pickers(^6.19.3)、i18next-http-backend(^2.4.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@erpsquad/common 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@erpsquad/common 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@erpsquad/common 可以商用吗?

@erpsquad/common 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@erpsquad/common 的下载量有多少?

根据 npm 官方下载统计,@erpsquad/common 在 2026/10/14 – 2026/11/12 这 30 天内被下载 36,968 次,日均约 1,232 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@erpsquad/common 还在维护吗?

最新版本 1.11.28 发布于 2026/11/12(1 天前);至今共发布 540 个版本,其中过去 12 个月发布了 520 个;首次发布于 2025/11/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。