предисловие
⭐Nextjs-TS-Antd-Redux-Storybook-Jest-Starter
Причина, по которой существует этот проект, заключается в том, что мне может понадобиться практиковать другие проекты Next.js каждый день, и я не хочу каждый раз перенастраивать его, но, исходя из обсессивно-компульсивного расстройства, я чувствую, что конфигурация нормального предприятия -level необходим, поэтому я хочу открыть его. Получить общий шаблон строительных лесов.
Говоря о Next.js, я написал статью в августе.Практика с вами, чтобы начать работу с NextJs (v9.5), в основном из-за того, что большинство Next.js в Интернете — это учебники по старой версии v7.x, поэтому я написал более новую версию 9.5.Я не ожидал, что Next.js 10 будет выпущен в октябре, и меня застали врасплох , но часть обновления в основном касается оптимизации изображения и т. д., вы все еще можете это увидеть.
Этот проект также хочет добавить точки, которые я считаю лучшими на практике в моей повседневной работе, а также намерен продолжать следить за передовым опытом и последними версиями библиотек в соответствии с проектом. Конечно, когда речь идет о конкретных бизнес-сценариях, строительные леса должны быть в некоторой степени модифицированы, но цель состоит в том, чтобы снизить стоимость модификации, по крайней мере, базовая конфигурация сделана хорошо.
Основная библиотека и версия скаффолдинга:
Next.js 10.x
React 17.x
TypeScript 4.x
Ant Design 4.x
Styled-components 5.x
Storybook 6.x
Инициализация шаблона Next.js
npx create-next-app nextjs-ts-redux-antd-starter
Добавить поддержку TypeScript
Новое в корневом каталогеtsconfig.json
файл, запуститьyarn dev
, вы увидите, что он предлагает нам установить библиотеку типов
yarn add --dev typescript @types/react @types/node
Кстати@types/react-dom
также наденьте
После установки запуститеyarn dev
, будет автоматически сгенерирован в корневом каталогеnext-env.d.ts
файл иtsconfig.json
С конфигурацией по умолчанию здесь я внесу небольшое изменение в конфигурацию.
Для получения подробной информации, пожалуйста, обратитесь к официальному сайту ТС.элемент конфигурации:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"src/*": [
"src/*"
]
},
"target": "es5",
"module": "esnext",
"strict": true,
"allowJs": true, // 允许编译js文件
"jsx": "preserve", // 在 .tsx文件里支持JSX
"noEmit": true, // 不输出文件
"lib": [
"dom",
"dom.iterable",
"esnext"
], // TS需要引用的库,即声明文件
"esModuleInterop": true, // 允许export=导出,由import from导入
"moduleResolution": "node", // 模块解析策略,ts默认用node的解析策略,即相对的方式导入
"allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入
"isolatedModules": true, // 将每个文件作为单独的模块
"resolveJsonModule": true, // 允许把json文件当做模块进行解析
"skipLibCheck": true, // 跳过所有声明文件的类型检查
"forceConsistentCasingInFileNames": true // 不允许对同一文件使用不一致大小写的引用
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx"
],
"exclude": [
"node_modules",
".next",
"dist"
]
}
Затем очистите чистый каталог, поместитеstyles
, pages
остался только одинindex.js
может быть иindex.js
переименован вindex.tsx
import { NextPage } from 'next'
const Home: NextPage = () => {
return <div>Hello nextjs-ts-redux-antd-starter</div>
}
export default Home
EditorConfig
В качестве единой спецификации стиля кода проекта нам необходимо использовать сторонние инструменты для обеспечения
.editorconfig
Это файл конфигурации, который поддерживает единый стиль кодирования в редакторах.В VSCode вам необходимо установить соответствующий плагин EditorConfig для VS Code.После установки вы можете ввестиGenerate .editorcofig
можно быстро сгенерировать.editorconfig
файл, или вы можете создать новый файл самостоятельно.
существует.editorcofig
файл, вы можете установить файл по разному, например, мой такой:
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
Prettier
yarn add prettier -D
Вам также необходимо установить плагин VSCodePrettier - Code formatter
создать новый файл.prettierrc
{
"singleQuote": true,
"tabWidth": 2,
"endOfLine": "lf",
"trailingComma": "all",
"printWidth": 100,
"arrowParens": "avoid",
"semi": false,
"bracketSpacing": true,
"overrides": [
{
"files": ".prettierrc",
"options": { "parser": "json" }
}
]
}
добавить файл игнорирования.prettierignore
**/*.png
**/*.svg
**/*.ico
package.json
lib/
es/
dist/
.next/
coverage/
LICENSE
yarn.lock
yarn-error.log
*.sh
.gitignore
.npmignore
.prettierignore
.DS_Store
.editorconfig
.eslintignore
**/*.yml
ESLint
yarn add eslint -D
запустить после установкиnpx eslint --init
, есть варианты после запуска, выбирайте следующим образом (в зависимости от ваших потребностей):
- To check syntax, find problems, and enforce code style
- JavaScript modules (import/export)
- React
- TypeScript Yes
- Browser Node
- Use a popular style guide
- Airbnb: GitHub.com/air не NB/Java…
- JavaScript
- Would you like to install them now with npm (Yes)
Он появится после установки npmpackage-lock.json
, если вы хотите использовать значение по умолчаниюyarn.lock
, удалите его, чтобы избежать конфликтов.
Установить автоматически сгенерированный.eslintrc
Файл еще не закончен, чтобы писать код лучше и больше в соответствии с нормами сообщества, мы добавим несколько хороших плагинов eslint.
-
eslint-plugin-unicorn
: Предоставляет очень полезный набор правил, таких как циклическое обнаружение зависимостей, ограничения стиля имени файла и т. д. -
eslint-config-prettier
: Когда Eslint и Cretetier используются вместе, правила должны быть изменены для предотвращения дублирования или конфликта; этот плагин существует для решения этой проблемы, и ее можно использовать для закрытия всех правил, которые могут вызвать конфликты. -
eslint-plugin-import
: может быть правильно проанализирован.tsx, .ts, .js, .json
Имя суффикса (также необходимо указать разрешенный суффикс имени и добавить его в поле настроек) -
eslint-import-resolver-alias
: eslint может распознавать пользовательский путь псевдонима псевдонима -
eslint-import-resolver-typescript
:Позволятьeslint-plugin-import
можно правильно разобратьtsconfig.json
серединаpaths
сопоставление, его необходимо установить.
Моя конфигурация выглядит следующим образом,rules
Игнорируйте правила и добавляйте свои собственные, варьирующиеся от человека к человеку.
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'airbnb',
'plugin:react/recommended',
'plugin:import/typescript',
'plugin:@typescript-eslint/recommended',
'prettier/react',
],
settings: {
'import/resolver': {
node: {
extensions: ['.tsx', '.ts', '.js', '.json'],
},
alias: [['src', './src']],
},
},
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: ['react', '@typescript-eslint', 'react-hooks', 'unicorn'],
rules: {
semi: 0,
indent: 0,
'react/jsx-filename-extension': 0,
'react/prop-types': 0,
'react/jsx-props-no-spreading': 0,
'jsx-a11y/click-events-have-key-events': 0,
'jsx-a11y/no-static-element-interactions': 0,
'jsx-a11y/no-noninteractive-element-interactions': 0,
'no-use-before-define': 0,
'no-unused-vars': 0,
'implicit-arrow-linebreak': 0,
'consistent-return': 0,
'arrow-parens': 0,
'object-curly-newline': 0,
'operator-linebreak': 0,
'import/no-extraneous-dependencies': 0,
'import/extensions': 0,
'import/no-unresolved': 0,
'import/prefer-default-export': 0,
},
}
создать новый файл.eslintignore
, игнорируя некоторые проверки файлов
/node_modules
/public
/dist
/.next
/coverage
StyleLint
sass/less/css
-
eslint-config-prettier
: Используйте плагин для отключения правил, конфликтующих с Prettier. -
stylelint-config-rational-order
: группировка и сортировка связанных свойств -
stylelint-declaration-block-no-ignored-properties
: стиль противоречия игнорируется -
stylelint-order
: заставляет вас писать css в определенном порядке
.stylelintrc
{
extends: [
'stylelint-config-standard',
'stylelint-config-rational-order',
'stylelint-config-prettier',
],
plugins: ['stylelint-order', 'stylelint-declaration-block-no-ignored-properties'],
}
styled-components
Выше приведена конфигурация, которую можно полностью скопировать с помощью sass или меньше.Что касается скаффолдинга, я решил использовать следующую схему CSS:styled-components
, stylelint настраивает styled-components. В библиотеке еще не реализовано автоматическое восстановление, поэтому--fix
В настоящее время он недействителен и требует установки другого плагина правил stylelint.
yarn add styled-components
yarn add -D @types/styled-components stylelint-processor-styled-components stylelint-config-styled-components
.stylelintrc
{
"processors": [
"stylelint-processor-styled-components"
],
"plugins": [
"stylelint-order"
],
"extends": [
"stylelint-config-standard",
"stylelint-config-styled-components"
]
}
новый файлbabel.config.js
{
"presets": ["next/babel"],
"plugins": [["styled-components", { "ssr": true }]]
}
ты можешь разделитьdevelopment
,test
,production
, Различайте настройки стилевых компонентов, такие какbabel.config.js
создать новый файлpages/_document.tsx
, чтобы переписать код в пользовательском стиле документа. Он будет вызываться только во время рендеринга на стороне сервера.Он в основном используется для изменения содержимого документа, отображаемого на стороне сервера, и обычно используется со сторонними решениями css-in-js.
import React from 'react'
import Document, { DocumentContext } from 'next/document'
import { ServerStyleSheet } from 'styled-components'
class MyDocument extends Document {
static async getInitialProps(ctx: DocumentContext) {
const sheet = new ServerStyleSheet()
const originalRenderPage = ctx.renderPage
try {
const initialProps = await Document.getInitialProps(ctx)
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: App => props => sheet.collectStyles(<App {...props} />),
})
return {
...initialProps,
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
}
} finally {
sheet.seal()
}
}
}
export default MyDocument
.vscode
Создайте новую папку в корневом каталоге.vscode
, и создайте в этой папке новый файл settings.json. Конфигурация этого файла имеет приоритет над вашей собственной глобальной конфигурацией VSCode и не будет форматироваться по-разному из-за разных глобальных конфигураций VSCode разных членов команды.
settings.json
{
"search.exclude": {
"**/node_modules": true,
"dist": true,
".next": true,
"yarn.lock": true
},
"editor.formatOnSave": true,
"editor.tabSize": 2,
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true
}
}
хриплый и ворсистый
Каждый раз, когда вы отправляете код, вы должны сначала проверить и отформатировать код, чтобы обеспечить согласованный стиль кода. Итак, мы устанавливаемhusky
Чтобы решить эту проблему, но мы хотим обрабатывать только код, который мы изменили (временная область) каждый раз, когда мы форматируем lint, мы можем выбратьlint-staged
yarn add -D husky lint-staged
существуетpackage.json
Настройте действие хука фиксации git:
"husky": {
"hooks": {
"commit-msg": "commitlint --config .commitlintrc.js -E HUSKY_GIT_PARAMS",
"pre-commit": "lint-staged && yarn tsc"
}
},
"lint-staged": {
"*.{tsx,ts,js,jsx}": [
"stylelint",
"prettier --write",
"eslint --fix"
],
"*.{css,less,scss}": [
"stylelint",
"prettier --write"
],
"*.{md,json,yaml,yml}": [
"prettier --write"
]
},
prettier --write
середина--write
Указывает, что отформатированный код записывается в исходный файл, в противном случае файл будет выводиться.
над"pre-commit": "lint-staged && yarn tsc"
я также добавилyarn tsc
, есть проблема с типом проверки ts, конечно, он вам не будет представлен, и ошибки будут найдены рано.
Кроме того, требуется ли обязательное--fix
Посмотрите на человека, потому что кто-то будет обеспокоен тем, что принуждение эквивалентно черному ящику, вы не знаете, что оно делает с вашим кодом.
commitlint
Предыдущий файл, который мы отправили, будет автоматически отформатирован, а затем мы займемся вопросом спецификации отправки коммита.
yarn add @commitlint/cli @commitlint/config-conventional -D
Типы коммитов git по умолчанию следующие.Это конфигурация коммитлинта в стиле angular.Я обычно привыкаю к этому набору правил.
[
'build',
'ci',
'chore',
'docs',
'feat',
'fix',
'perf',
'refactor',
'revert',
'style',
'test'
];
Новое в корневом каталоге.commitlintrc.js
:
module.exports = {
extends: ['@commitlint/config-conventional'],
}
Что же делать, если новичок в команде никогда им не пользовался и не может вспомнить первые слова выше, так давайте составим команду, позволяющую ему выбрать и установить плагин.
-
cz-conventional-changelog
: это адаптер, предустановка, соответствующая спецификации команды Angular.
yarn add cz-conventional-changelog -D
существуетpackage.json
Средняя конфигурация
{
"scripts": {
"commit": "git-cz"
},
"config": {
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
}
}
}
бегатьyarn commit
, появится страница для выбора
Redux
Базовая конфигурация спецификации проекта почти такая же, и следующим шагом будет создание инструмента управления состоянием проекта.Я выбрал здесь самый классический Redux, выбор асинхронной обработкиredux-saga
yarn add redux react-redux redux-saga
yarn add -D @types/react-redux @types/redux-saga redux-devtools-extension next-redux-wrapper
У сообщества есть и другие решения по упрощению редукции, такие как использованиеredux-actions, но сопровождение проекта кажется сложным, поэтому использовать не буду, есть еще dva и т.п. или другие библиотеки управления состоянием типа mobx, замену можете рассмотреть сами, вот просто распространенное решение.
src/redux/index.ts
import { createWrapper, MakeStore } from 'next-redux-wrapper'
import { applyMiddleware, createStore } from 'redux'
import createSagaMiddleware from 'redux-saga'
import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly'
import rootReducer from 'src/redux/rootReducers'
import rootSaga from 'src/redux/rootSagas'
const makeStore: MakeStore<Store.RootState> = () => {
const sagaMiddleware = createSagaMiddleware()
const store = createStore(rootReducer, composeWithDevTools(applyMiddleware(sagaMiddleware)))
sagaMiddleware.run(rootSaga)
return store
}
export const wrapper = createWrapper < Store.RootState > makeStore
новый файлpages/_app.tsx
Ввести избыточность для переопределения приложения Next.js по умолчанию
import React, { FC } from 'react'
import { AppProps } from 'next/app'
import { wrapper } from 'src/redux'
import Layout from 'src/components/Layout'
const WrappedApp: FC<AppProps> = ({ Component, pageProps }) => (
<Layout>
<Component {...pageProps} />
</Layout>
)
export default wrapper.withRedux(WrappedApp)
Демонстрации другого кода и примеров см.исходный код
Существует несколько структур проекта для редукса.Какая из них лучше зависит от размера и сложности проекта.Этот скаффолдинг - это только один из видов скаффолдинга.Структура данных редукса разделена по модулям.Это не значит насколько хорош этот метод , Это зависит от проекта Настройте структуру каталогов.
Я делаю небольшую демонстрацию, где сага запрашивает пользовательские данные, возвращает их и отображает на странице, о редуксеState
Определения типов, которые я поместил в корневой каталогtypes
папка.
Конечно, это всего лишь эталонный метод, вы также можете создать новый в модуле каталога redux.types
размещение файлаState
Определение типа.
Поддержка дизайна Ant
yarn add antd
yarn add -D babel-plugin-import
babel.config.js
module.exports = {
plugins: [
[
'import',
{
libraryName: 'antd',
libraryDirectory: 'lib',
style: 'index.css',
},
],
],
}
существуетsrc/_app.tsx
Введите стиль antd в:
import 'antd/dist/antd.css'
Автоматическое развертывание Travis
По умолчанию это устанавливается первым (добавьте Jest позже, а затем добавьте скриптyarn test
). Если вы не понимаете, прочитайте мою статьюПрактическое руководство по началу работы с автоматизированным развертыванием Travis
language: node_js
node_js:
- "stable"
cache: yarn
install:
- yarn
script:
- yarn build
Документация по компонентам сборки сборника рассказов
Storybook запускается вместе с приложением в режиме разработки и помогает создавать компоненты пользовательского интерфейса, изолированные от бизнес-логики и контекста приложения.
npx -p @storybook/cli sb init
После завершения установки начнется работа
yarn storybook
Затем будут некоторые начальные примеры компонентов, вы можете удалить их, когда увидите.
How to write storiesНаписав истории для компонентов, мы можем дать нам общее представление о компонентах, используемых во всем проекте, например, как они выглядят и т. д., а также меняется ли UI, о чем будет написано ниже.
глобализация
yarn add react-i18next i18next
Конечно, вы также можете использовать его напрямуюnext-i18next
src/i18n/index.ts
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import zhCN from './locales/zh_CN.json'
import enUS from './locales/en_US.json'
i18n.use(initReactI18next).init({
lng: 'zh_CN',
fallbackLng: 'zh_CN',
resources: {
zh_CN: {
translation: zhCN,
},
en_US: {
translation: enUS,
},
},
debug: false,
interpolation: {
escapeValue: false,
},
})
export default i18n
В частности, посмотрите непосредственно на код, так много здесь представлено; затем вы можете переключить язык и сконцентрировать некоторые слова и предложения, используемые в проекте, вzh_CN.json
а такжеen_US.json
Подождите, чтобы написать.
Шуточные модульные тесты
Для надежности кода, конечно же, добавьте юнит-тесты. Если вы не понимаете, что такое модульное тестирование, сначала прочитайте мою статью.Эта статья поможет вам понять модульное тестирование Jest.
yarn add -D jest @types/jest eslint-plugin-jest babel-jest @storybook/addon-storyshots
настроить.eslintrc.js
module.exports = {
extends: ['plugin:jest/recommended'],
plugins: ['jest'],
}
Создайте новый файл в корневом каталогеjest.config.js
module.exports = {
moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
testPathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/node_modules/', '<rootDir>/.next/'],
moduleNameMapper: {
'^src(.*)$': '<rootDir>/src$1',
'^server(.*)$': '<rootDir>/server$1',
'^pages(.*)$': '<rootDir>/pages$1',
},
collectCoverageFrom: [
'./{src,server}/**/*.{ts,tsx,js,jsx}',
'!**/node_modules/**',
'!**/dist/**',
'!**/coverage/**',
'!**/*.stories.{ts,tsx,js,jsx}',
'!**/{config,constants,styles,types,__fixtures__}/**',
],
watchPathIgnorePatterns: ['dist'],
}
Объединение сборника рассказов и снимков Jest
Jest может сгенерировать тест моментального снимка (Snapshot), который может сказать нам, является ли элемент страницы ненормальным, отсутствующим или добавленным, или был ли изменен файл конфигурации посредством изменения моментального снимка. Справочник установлен выше.Если это снапшот реактивного компонента, нужны другие плагины.Здесь мы переходим к тому, чтобы полагаться на генерацию историй из сборника рассказов.
Для реагирования Jest сделает снимок виртуального DOM, преобразует его в данные json и сравнит два снимка на наличие отклонений при следующем запуске.
yarn add -D @storybook/addon-storyshots
Новое в корневом каталогеjest.config.js
, Конфигурация моментального снимка следующая, другие конфигурации настраиваются в соответствии с проектом, см.jest.config.js
module.exports = {
transform: {
'^.+\\.stories\\.[tj]sx?$': '@storybook/addon-storyshots/injectFileName',
'^.+\\.[tj]sx?$': 'babel-jest',
},
}
создать новый файлsrc/__tests__/storyshot.test.ts
import initStoryshots, { multiSnapshotWithOptions } from '@storybook/addon-storyshots'
initStoryshots({
test: multiSnapshotWithOptions(),
})
После написания компонентаstories
место, использованиеyarn jest
, помимо запуска тестов, также будет автоматически запускаться*.stories.tsx
Сравните/создайте снимок.
Для сгенерированного снимка вы увидите
Я например написалFooter
Для компонентов есть только теги HTML и соответствующие атрибуты, поэтому обнаружения недостаточно, потому что я не знаю, какие изменения были внесены в атрибуты класса css, потому что схема css, которую я использую,styled-components
, поэтому вам нужно настроить его снова:
yarn add -D jest-specific-snapshot jest-styled-components
настроитьsrc/__tests__/storyshot.test.ts
import initStoryshots, { multiSnapshotWithOptions } from '@storybook/addon-storyshots'
import 'jest-styled-components'
import { addSerializer } from 'jest-specific-snapshot'
import styleSheetSerializer from 'jest-styled-components/src/styleSheetSerializer'
addSerializer(styleSheetSerializer)
initStoryshots({
test: multiSnapshotWithOptions(),
})
Глядя на текущий снимок, уже имеется множество стилей для справки и сравнения, так что можно зафиксировать тонкие модификации стилей компонентов;
Enzyme
Jest может иметь достаточное количество API для тестирования функций, классов и т. д., но для компонентов React, если вы хотите провести подробное тестирование, вам необходимо установить другие плагины для их поддержки, такие какreact-test-library
а такжеenzyme
, здесь я выбираю те, которые я использовал немного большеenzyme(от Airbnb Inc.), и необходимо установить его адаптер.
Здесь, поскольку React был обновлен до версии 17, но официальный адаптер фермента не был обновлен до соответствующей версии 17, некоторые методы тестирования могут сообщать об ошибках, поэтому вместо этого временно используйте текущую версию этой библиотеки, которую Github использует больше.@wojtekmaj/enzyme-adapter-react-17
, и дождитесь официального обновления, чтобы заменить его. Это только для тестирования и не повлияет на онлайн-среду.Пока фермент поставляется со всеми методами, которые могут работать должным образом без сообщений об ошибках, мы можем хорошо писать наши тестовые примеры.
yarn add enzyme @wojtekmaj/enzyme-adapter-react-17 -D
Создайте новый файл в корневом каталогеjest.setup.ts
import Enzyme from 'enzyme'
import Adapter from '@wojtekmaj/enzyme-adapter-react-17'
Enzyme.configure({ adapter: new Adapter() })
в то же времяjest.config.js
импортировать в
module.exports = {
setupFiles: ['<rootDir>/jest.setup.ts'],
}
Обычно тестирование компонентов React не имеет большого значения.Тесто нужно тестировать компоненты пользовательского интерфейса, часто используемые компоненты и некоторые компоненты, которые склонны к ошибкам в поведении, если они изменяют все тело.
Сгенерируйте CHANGELOG и автоматизируйте управление версиями
Здесь я используюstandard-version
.
yarn add -D standard-version
стандартная версия — это инструмент автоматизации версии и журнала изменений, который следует стандартной спецификации сообщения semver и фиксации.
"bump-version": "standard-version --skip.commit --skip.tag"
бегатьyarn bump-version
После этого вы обнаружите, что номер версии package.json изменился (при условии, что у вас есть изменения фиксации, такие как feat или fix), и CAHNGEALOG.md автоматически генерируется, и все это можно настроить и настроить.
Версия с тегами Github
Нажмите, чтобы создать выпуск в правой части страницы проекта Github.
Затем заполните номер версии.Для получения подробной информации, я буду непосредственно перемещать содержимое CHANGELOG.md, а затем нажмитеPublish release
Вот и все.
Улучшить команду скрипта
существуетpackage.json
середина
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"commit": "git-cz",
"test": "jest",
"coverage": "yarn jest --coverage",
"lint": "yarn lint:eslint && yarn lint:css",
"lint:eslint": "eslint --ext js,jsx,ts,tsx .",
"lint:css": "stylelint **/*.{ts,tsx}",
"prettier": "prettier --write \"**/*.{js,jsx,tsx,ts,less,md,json}\"",
"tsc:client": "tsc --noEmit -p tsconfig.json",
"storybook": "start-storybook -p 6006",
"build-storybook": "build-storybook -o ./dist_storybook",
"bump-version": "standard-version --skip.commit --skip.tag"
},
LICENSE
Добавьте лицензию с открытым исходным кодом, я выбираю свободную лицензию MIT.
MIT License
Copyright (c) 2020 nextjs-ts-redux-antd-starter
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
запустить проект
Вышеупомянутая демонстрация также пропускает некоторые детали и другие конфигурации, вам нужно увидеть ее в деталях.исходный кодБар.
Я не планирую добавлять слишком много вещей ко всей скаффолдинге, как показано на рисунке ниже.Ведь в качестве шаблона скаффолдинга необходимо удалить много хлопот при добавлении слишком большого количества функций, потому что это не определенный тип бизнес-сайта.Насколько это возможно, иметь демо-ссылку на линии. Поэтому я постараюсь сделать его простым, а затем я буду стремиться улучшить конфигурацию Next.js, разработку внешнего интерфейса и оптимизацию производительности, а затем некоторые общие функции и функции.
Эпилог
Леса здесь? Еще нет, еще много чего не добавлено, например, сортировка конфигурации конфигурации Next.js, оптимизация SEO, публикация на онлайн-сайтах и npm, некоторая совместимость, специальная обработка страниц, отзывчивость и т. д.
Конечно, на момент написания этой статьи строительные леса также были плохо написаны или несовершенны.Поскольку они только начались, строительные леса будут поддерживаться постоянно, а рабочие практики и передовой опыт будут внедряться в проект.Продолжайте обновлять , следите за обновлениями, добро пожаловать, звезда 🌟🌟🌟GitHub.com/Jacky-сум…
- пс:
- Личный технический пост в блоге Github-репозиторий
- monki-ui: Разработать библиотеку компонентов пользовательского интерфейса на основе React + TypeScript + Dumi + Jest + Enzyme и в будущем напишет соответствующие статьи.
Если вы считаете, что это хорошо, дайте мне звезду и дайте мне мотивацию продолжать творить! Продолжить в следующий раз...