@modern-js/main-doc 0.0.0-next-20221116121040
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +12 -0
- package/CHANGELOG.md +15 -0
- package/LICENSE +144 -0
- package/en/configure/app/dev/asset-prefix.md +13 -0
- package/en/configure/app/dev/hmr.md +13 -0
- package/en/configure/app/dev/https.md +13 -0
- package/en/configure/app/dev/port.md +13 -0
- package/en/configure/app/dev/progress-bar.md +13 -0
- package/en/configure/app/dev/start-url.md +13 -0
- package/en/configure/app/html/app-icon.md +13 -0
- package/en/configure/app/html/crossorigin.md +13 -0
- package/en/configure/app/html/disable-html-folder.md +13 -0
- package/en/configure/app/html/favicon-by-entries.md +13 -0
- package/en/configure/app/html/favicon.md +13 -0
- package/en/configure/app/html/inject-by-entries.md +13 -0
- package/en/configure/app/html/inject.md +13 -0
- package/en/configure/app/html/meta-by-entries.md +13 -0
- package/en/configure/app/html/meta.md +13 -0
- package/en/configure/app/html/mount-id.md +13 -0
- package/en/configure/app/html/template-by-entries.md +13 -0
- package/en/configure/app/html/template-parameters-by-entries.md +13 -0
- package/en/configure/app/html/template-parameters.md +13 -0
- package/en/configure/app/html/template.md +13 -0
- package/en/configure/app/html/title-by-entries.md +13 -0
- package/en/configure/app/html/title.md +13 -0
- package/en/configure/app/output/asset-prefix.md +13 -0
- package/en/configure/app/output/assets-retry.md +13 -0
- package/en/configure/app/output/charset.md +13 -0
- package/en/configure/app/output/clean-dist-path.md +13 -0
- package/en/configure/app/output/convert-to-rem.md +13 -0
- package/en/configure/app/output/copy.md +13 -0
- package/en/configure/app/output/css-module-local-ident-name.md +13 -0
- package/en/configure/app/output/data-uri-limit.md +13 -0
- package/en/configure/app/output/disable-css-module-extension.md +13 -0
- package/en/configure/app/output/disable-filename-hash.md +13 -0
- package/en/configure/app/output/disable-inline-runtime-chunk.md +13 -0
- package/en/configure/app/output/disable-minimize.md +13 -0
- package/en/configure/app/output/disable-source-map.md +13 -0
- package/en/configure/app/output/dist-path.md +13 -0
- package/en/configure/app/output/enable-asset-fallback.md +13 -0
- package/en/configure/app/output/enable-asset-manifest.md +13 -0
- package/en/configure/app/output/enable-css-module-tsdeclaration.md +13 -0
- package/en/configure/app/output/enable-inline-scripts.md +13 -0
- package/en/configure/app/output/enable-inline-styles.md +13 -0
- package/en/configure/app/output/enable-latest-decorators.md +13 -0
- package/en/configure/app/output/externals.md +13 -0
- package/en/configure/app/output/filename.md +13 -0
- package/en/configure/app/output/legal-comments.md +13 -0
- package/en/configure/app/output/override-browserslist.md +13 -0
- package/en/configure/app/output/polyfill.md +13 -0
- package/en/configure/app/output/svg-default-export.md +13 -0
- package/en/configure/app/performance/build-cache.md +13 -0
- package/en/configure/app/performance/bundle-analyze.md +13 -0
- package/en/configure/app/performance/chunk-split.md +13 -0
- package/en/configure/app/performance/print-file-size.md +13 -0
- package/en/configure/app/performance/profile.md +13 -0
- package/en/configure/app/performance/remove-console.md +13 -0
- package/en/configure/app/performance/remove-moment-locale.md +13 -0
- package/en/configure/app/security/sri.md +13 -0
- package/en/configure/app/source/alias.md +13 -0
- package/en/configure/app/source/compile-js-data-uri.md +13 -0
- package/en/configure/app/source/define.md +13 -0
- package/en/configure/app/source/global-vars.md +13 -0
- package/en/configure/app/source/include.md +13 -0
- package/en/configure/app/source/module-scopes.md +13 -0
- package/en/configure/app/source/pre-entry.md +13 -0
- package/en/configure/app/source/resolve-extension-prefix.md +13 -0
- package/en/configure/app/source/resolve-main-fields.md +13 -0
- package/en/configure/app/tools/autoprefixer.md +13 -0
- package/en/configure/app/tools/babel.md +13 -0
- package/en/configure/app/tools/css-extract.md +13 -0
- package/en/configure/app/tools/css-loader.md +13 -0
- package/en/configure/app/tools/dev-server.md +13 -0
- package/en/configure/app/tools/html-plugin.md +13 -0
- package/en/configure/app/tools/inspector.md +13 -0
- package/en/configure/app/tools/less.md +13 -0
- package/en/configure/app/tools/minify-css.md +13 -0
- package/en/configure/app/tools/postcss.md +13 -0
- package/en/configure/app/tools/pug.md +13 -0
- package/en/configure/app/tools/sass.md +13 -0
- package/en/configure/app/tools/style-loader.md +13 -0
- package/en/configure/app/tools/styled-components.md +13 -0
- package/en/configure/app/tools/terser.md +13 -0
- package/en/configure/app/tools/ts-checker.md +13 -0
- package/en/configure/app/tools/ts-loader.md +13 -0
- package/en/configure/app/tools/webpack-chain.md +13 -0
- package/en/configure/app/tools/webpack.md +13 -0
- package/en/tutorials/foundations/_category_.json +5 -0
- package/en/tutorials/foundations/basic.md +8 -0
- package/en/tutorials/foundations/introduction.md +43 -0
- package/package.json +30 -0
- package/scripts/gen-config.ts +60 -0
- package/scripts/sync.ts +36 -0
- package/tsconfig.json +7 -0
- package/zh/apis/app/commands/_category_.json +8 -0
- package/zh/apis/app/commands/build.md +44 -0
- package/zh/apis/app/commands/dev.md +31 -0
- package/zh/apis/app/commands/index.md +12 -0
- package/zh/apis/app/commands/inspect.md +39 -0
- package/zh/apis/app/commands/lint.md +22 -0
- package/zh/apis/app/commands/new.md +59 -0
- package/zh/apis/app/commands/start.md +32 -0
- package/zh/apis/app/commands/test.md +36 -0
- package/zh/apis/app/commands/upgrade.md +23 -0
- package/zh/apis/app/hooks/_category_.json +8 -0
- package/zh/apis/app/hooks/api/_category_.json +4 -0
- package/zh/apis/app/hooks/api/framework/_category_.json +4 -0
- package/zh/apis/app/hooks/api/framework/app.md +100 -0
- package/zh/apis/app/hooks/api/framework/lambda.md +79 -0
- package/zh/apis/app/hooks/api/functions/_category_.json +4 -0
- package/zh/apis/app/hooks/api/functions/api.md +50 -0
- package/zh/apis/app/hooks/api/functions/app.md +10 -0
- package/zh/apis/app/hooks/api/functions/common.md +10 -0
- package/zh/apis/app/hooks/api/test.md +12 -0
- package/zh/apis/app/hooks/config/_category_.json +4 -0
- package/zh/apis/app/hooks/config/html.md +10 -0
- package/zh/apis/app/hooks/config/icon.md +17 -0
- package/zh/apis/app/hooks/config/mock.md +12 -0
- package/zh/apis/app/hooks/config/public.md +30 -0
- package/zh/apis/app/hooks/config/storybook.md +14 -0
- package/zh/apis/app/hooks/config/upload.md +48 -0
- package/zh/apis/app/hooks/index.md +12 -0
- package/zh/apis/app/hooks/modern-config.md +10 -0
- package/zh/apis/app/hooks/server/_category_.json +4 -0
- package/zh/apis/app/hooks/server/index.md +14 -0
- package/zh/apis/app/hooks/server/test.md +12 -0
- package/zh/apis/app/hooks/shared.md +8 -0
- package/zh/apis/app/hooks/src/_category_.json +4 -0
- package/zh/apis/app/hooks/src/app.md +41 -0
- package/zh/apis/app/hooks/src/error.md +10 -0
- package/zh/apis/app/hooks/src/eslint.md +9 -0
- package/zh/apis/app/hooks/src/index.md +35 -0
- package/zh/apis/app/hooks/src/pages.md +183 -0
- package/zh/apis/app/hooks/src/stories.md +14 -0
- package/zh/apis/app/hooks/src/test.md +12 -0
- package/zh/apis/app/overview.md +11 -0
- package/zh/apis/app/runtime/_category_.json +9 -0
- package/zh/apis/app/runtime/app/_category_.json +4 -0
- package/zh/apis/app/runtime/app/bootstrap.md +83 -0
- package/zh/apis/app/runtime/app/create-app.md +47 -0
- package/zh/apis/app/runtime/app/define-config.md +57 -0
- package/zh/apis/app/runtime/app/head.md +43 -0
- package/zh/apis/app/runtime/app/no-ssr.md +41 -0
- package/zh/apis/app/runtime/app/pre-render.md +77 -0
- package/zh/apis/app/runtime/app/use-module-app.md +60 -0
- package/zh/apis/app/runtime/app/use-module-apps.md +64 -0
- package/zh/apis/app/runtime/app/use-runtime-context.md +39 -0
- package/zh/apis/app/runtime/bff-server/_category_.json +4 -0
- package/zh/apis/app/runtime/bff-server/after-lambda-registed.md +35 -0
- package/zh/apis/app/runtime/bff-server/hook.md +120 -0
- package/zh/apis/app/runtime/bff-server/use-context.md +70 -0
- package/zh/apis/app/runtime/container/_category_.json +4 -0
- package/zh/apis/app/runtime/container/router.md +492 -0
- package/zh/apis/app/runtime/container/use-loader.md +64 -0
- package/zh/apis/app/runtime/default-alias.md +26 -0
- package/zh/apis/app/runtime/env.md +68 -0
- package/zh/apis/app/runtime/index.md +12 -0
- package/zh/apis/app/runtime/model/Provider.md +36 -0
- package/zh/apis/app/runtime/model/_category_.json +4 -0
- package/zh/apis/app/runtime/model/auto-actions.md +121 -0
- package/zh/apis/app/runtime/model/connect.md +134 -0
- package/zh/apis/app/runtime/model/create-app.md +74 -0
- package/zh/apis/app/runtime/model/create-store.md +60 -0
- package/zh/apis/app/runtime/model/handle-effect.md +106 -0
- package/zh/apis/app/runtime/model/model_.md +199 -0
- package/zh/apis/app/runtime/model/use-local-model.md +28 -0
- package/zh/apis/app/runtime/model/use-model.md +87 -0
- package/zh/apis/app/runtime/model/use-static-model.md +47 -0
- package/zh/apis/app/runtime/model/use-store.md +48 -0
- package/zh/apis/app/runtime/plugin/_category_.json +4 -0
- package/zh/apis/app/runtime/plugin/abstract.md +26 -0
- package/zh/apis/app/runtime/plugin/hook-api.md +896 -0
- package/zh/apis/app/runtime/plugin/hook.md +170 -0
- package/zh/apis/app/runtime/plugin/plugin-api.md +117 -0
- package/zh/apis/app/runtime/testing/_category_.json +4 -0
- package/zh/apis/app/runtime/testing/act.md +34 -0
- package/zh/apis/app/runtime/testing/cleanup.md +37 -0
- package/zh/apis/app/runtime/testing/render.md +52 -0
- package/zh/apis/app/runtime/testing/renderApp.md +31 -0
- package/zh/apis/app/runtime/utility/_category_.json +4 -0
- package/zh/apis/app/runtime/utility/css-in-js.md +60 -0
- package/zh/apis/app/runtime/utility/loadable/_category_.json +4 -0
- package/zh/apis/app/runtime/utility/loadable/lazy.md +29 -0
- package/zh/apis/app/runtime/utility/loadable/loadable-component.md +61 -0
- package/zh/apis/app/runtime/utility/loadable/loadable-library.md +67 -0
- package/zh/apis/app/runtime/utility/loadable/loadable_.md +110 -0
- package/zh/apis/app/runtime/web-server/_category_.json +4 -0
- package/zh/apis/app/runtime/web-server/hook.md +121 -0
- package/zh/apis/generator/overview.md +32 -0
- package/zh/apis/generator/plugin/_category_.json +4 -0
- package/zh/apis/generator/plugin/file/_category_.json +4 -0
- package/zh/apis/generator/plugin/file/addFile.md +52 -0
- package/zh/apis/generator/plugin/file/addHelper.md +26 -0
- package/zh/apis/generator/plugin/file/addManyFile.md +55 -0
- package/zh/apis/generator/plugin/file/addPartial.md +26 -0
- package/zh/apis/generator/plugin/file/introduce.md +37 -0
- package/zh/apis/generator/plugin/file/rmDir.md +24 -0
- package/zh/apis/generator/plugin/file/rmFile.md +24 -0
- package/zh/apis/generator/plugin/file/updateJSONFile.md +52 -0
- package/zh/apis/generator/plugin/file/updateModernConfig.md +26 -0
- package/zh/apis/generator/plugin/file/updateTextRawFile.md +33 -0
- package/zh/apis/generator/plugin/git/_category_.json +4 -0
- package/zh/apis/generator/plugin/git/gitAddAndCommit.md +20 -0
- package/zh/apis/generator/plugin/git/initGitRepo.md +16 -0
- package/zh/apis/generator/plugin/git/isInGitRepo.md +16 -0
- package/zh/apis/generator/plugin/hook/_category_.json +4 -0
- package/zh/apis/generator/plugin/hook/afterForged.md +35 -0
- package/zh/apis/generator/plugin/hook/onForged.md +35 -0
- package/zh/apis/generator/plugin/info/_category_.json +4 -0
- package/zh/apis/generator/plugin/info/isFileExit.md +22 -0
- package/zh/apis/generator/plugin/info/locale.md +17 -0
- package/zh/apis/generator/plugin/info/readDir.md +22 -0
- package/zh/apis/generator/plugin/input/_category_.json +4 -0
- package/zh/apis/generator/plugin/input/addInputAfter.md +48 -0
- package/zh/apis/generator/plugin/input/addInputBefore.md +48 -0
- package/zh/apis/generator/plugin/input/addOptionAfter.md +45 -0
- package/zh/apis/generator/plugin/input/addOptionBefore.md +45 -0
- package/zh/apis/generator/plugin/input/setInput.md +42 -0
- package/zh/apis/generator/plugin/input/setInputValue.md +28 -0
- package/zh/apis/generator/plugin/input/type.md +101 -0
- package/zh/apis/generator/plugin/introduce.md +93 -0
- package/zh/apis/generator/plugin/new/_category_.json +4 -0
- package/zh/apis/generator/plugin/new/createElement.md +33 -0
- package/zh/apis/generator/plugin/new/createSubProject.md +35 -0
- package/zh/apis/generator/plugin/new/enableFunc.md +46 -0
- package/zh/apis/generator/plugin/new/introduce.md +15 -0
- package/zh/apis/generator/plugin/npm/_category_.json +4 -0
- package/zh/apis/generator/plugin/npm/install.md +16 -0
- package/zh/apis/monorepo/commands/_category_.json +8 -0
- package/zh/apis/monorepo/commands/bump.md +42 -0
- package/zh/apis/monorepo/commands/change.md +58 -0
- package/zh/apis/monorepo/commands/clear.md +27 -0
- package/zh/apis/monorepo/commands/deploy.md +39 -0
- package/zh/apis/monorepo/commands/gen-release-note.md +35 -0
- package/zh/apis/monorepo/commands/index.md +12 -0
- package/zh/apis/monorepo/commands/lint.md +21 -0
- package/zh/apis/monorepo/commands/new.md +41 -0
- package/zh/apis/monorepo/commands/pre.md +68 -0
- package/zh/apis/monorepo/commands/release.md +20 -0
- package/zh/apis/monorepo/commands/upgrade.md +23 -0
- package/zh/apis/monorepo/hooks/_category_.json +8 -0
- package/zh/apis/monorepo/hooks/apps.md +12 -0
- package/zh/apis/monorepo/hooks/code-workspace.md +10 -0
- package/zh/apis/monorepo/hooks/examples.md +14 -0
- package/zh/apis/monorepo/hooks/features.md +14 -0
- package/zh/apis/monorepo/hooks/index.md +12 -0
- package/zh/apis/monorepo/hooks/packages.md +14 -0
- package/zh/apis/monorepo/hooks/pnpm-workspace.md +10 -0
- package/zh/apis/monorepo/hooks/pnpmfile.md +10 -0
- package/zh/apis/monorepo/overview.md +11 -0
- package/zh/community/index.md +3 -0
- package/zh/components/command-tip.md +57 -0
- package/zh/components/deploy.md +60 -0
- package/zh/components/dev-ide.md +1 -0
- package/zh/components/entry-name.md +15 -0
- package/zh/components/env-prepare.md +1 -0
- package/zh/components/launch-bff-choices.md +6 -0
- package/zh/components/reduck-tip.md +5 -0
- package/zh/configure/app/bff/_category_.json +4 -0
- package/zh/configure/app/bff/fetcher.md +32 -0
- package/zh/configure/app/bff/prefix.md +38 -0
- package/zh/configure/app/bff/proxy.md +76 -0
- package/zh/configure/app/dev/_category_.json +4 -0
- package/zh/configure/app/dev/asset-prefix.md +13 -0
- package/zh/configure/app/dev/hmr.md +13 -0
- package/zh/configure/app/dev/https.md +13 -0
- package/zh/configure/app/dev/port.md +13 -0
- package/zh/configure/app/dev/progress-bar.md +13 -0
- package/zh/configure/app/dev/proxy.md +79 -0
- package/zh/configure/app/dev/start-url.md +13 -0
- package/zh/configure/app/dev/with-master-app.md +35 -0
- package/zh/configure/app/html/app-icon.md +13 -0
- package/zh/configure/app/html/crossorigin.md +13 -0
- package/zh/configure/app/html/disable-html-folder.md +13 -0
- package/zh/configure/app/html/favicon-by-entries.md +13 -0
- package/zh/configure/app/html/favicon.md +13 -0
- package/zh/configure/app/html/inject-by-entries.md +13 -0
- package/zh/configure/app/html/inject.md +13 -0
- package/zh/configure/app/html/meta-by-entries.md +13 -0
- package/zh/configure/app/html/meta.md +13 -0
- package/zh/configure/app/html/mount-id.md +13 -0
- package/zh/configure/app/html/template-by-entries.md +13 -0
- package/zh/configure/app/html/template-parameters-by-entries.md +13 -0
- package/zh/configure/app/html/template-parameters.md +13 -0
- package/zh/configure/app/html/template.md +13 -0
- package/zh/configure/app/html/title-by-entries.md +13 -0
- package/zh/configure/app/html/title.md +13 -0
- package/zh/configure/app/output/_category_.json +4 -0
- package/zh/configure/app/output/asset-prefix.md +13 -0
- package/zh/configure/app/output/assets-retry.md +13 -0
- package/zh/configure/app/output/charset.md +13 -0
- package/zh/configure/app/output/clean-dist-path.md +13 -0
- package/zh/configure/app/output/convert-to-rem.md +13 -0
- package/zh/configure/app/output/copy.md +13 -0
- package/zh/configure/app/output/css-module-local-ident-name.md +13 -0
- package/zh/configure/app/output/data-uri-limit.md +13 -0
- package/zh/configure/app/output/disable-css-module-extension.md +13 -0
- package/zh/configure/app/output/disable-filename-hash.md +13 -0
- package/zh/configure/app/output/disable-inline-runtime-chunk.md +13 -0
- package/zh/configure/app/output/disable-minimize.md +13 -0
- package/zh/configure/app/output/disable-node-polyfill.md +24 -0
- package/zh/configure/app/output/disable-source-map.md +13 -0
- package/zh/configure/app/output/dist-path.md +13 -0
- package/zh/configure/app/output/enable-asset-fallback.md +13 -0
- package/zh/configure/app/output/enable-asset-manifest.md +13 -0
- package/zh/configure/app/output/enable-css-module-tsdeclaration.md +13 -0
- package/zh/configure/app/output/enable-inline-scripts.md +13 -0
- package/zh/configure/app/output/enable-inline-styles.md +13 -0
- package/zh/configure/app/output/enable-latest-decorators.md +13 -0
- package/zh/configure/app/output/enable-modern-mode.md +26 -0
- package/zh/configure/app/output/externals.md +13 -0
- package/zh/configure/app/output/filename.md +13 -0
- package/zh/configure/app/output/legal-comments.md +13 -0
- package/zh/configure/app/output/override-browserslist.md +13 -0
- package/zh/configure/app/output/polyfill.md +13 -0
- package/zh/configure/app/output/ssg.md +226 -0
- package/zh/configure/app/output/svg-default-export.md +13 -0
- package/zh/configure/app/performance/build-cache.md +13 -0
- package/zh/configure/app/performance/bundle-analyze.md +13 -0
- package/zh/configure/app/performance/chunk-split.md +13 -0
- package/zh/configure/app/performance/print-file-size.md +13 -0
- package/zh/configure/app/performance/profile.md +13 -0
- package/zh/configure/app/performance/remove-console.md +13 -0
- package/zh/configure/app/performance/remove-moment-locale.md +13 -0
- package/zh/configure/app/plugins.md +74 -0
- package/zh/configure/app/runtime/_category_.json +4 -0
- package/zh/configure/app/runtime/master-app.md +72 -0
- package/zh/configure/app/runtime/router.md +54 -0
- package/zh/configure/app/runtime/state.md +45 -0
- package/zh/configure/app/security/sri.md +13 -0
- package/zh/configure/app/server/_category_.json +4 -0
- package/zh/configure/app/server/base-url.md +36 -0
- package/zh/configure/app/server/port.md +21 -0
- package/zh/configure/app/server/public-routes.md +29 -0
- package/zh/configure/app/server/routes.md +92 -0
- package/zh/configure/app/server/ssr-by-entries.md +32 -0
- package/zh/configure/app/server/ssr.md +24 -0
- package/zh/configure/app/source/_category_.json +4 -0
- package/zh/configure/app/source/alias.md +13 -0
- package/zh/configure/app/source/compile-js-data-uri.md +13 -0
- package/zh/configure/app/source/config-dir.md +15 -0
- package/zh/configure/app/source/define.md +13 -0
- package/zh/configure/app/source/design-system.md +1156 -0
- package/zh/configure/app/source/disable-default-entries.md +23 -0
- package/zh/configure/app/source/enable-async-entry.md +53 -0
- package/zh/configure/app/source/entries-dir.md +42 -0
- package/zh/configure/app/source/entries.md +55 -0
- package/zh/configure/app/source/global-vars.md +13 -0
- package/zh/configure/app/source/include.md +13 -0
- package/zh/configure/app/source/module-scopes.md +13 -0
- package/zh/configure/app/source/pre-entry.md +13 -0
- package/zh/configure/app/source/resolve-extension-prefix.md +13 -0
- package/zh/configure/app/source/resolve-main-fields.md +13 -0
- package/zh/configure/app/testing/_category_.json +4 -0
- package/zh/configure/app/testing/transformer.md +17 -0
- package/zh/configure/app/tools/_category_.json +4 -0
- package/zh/configure/app/tools/autoprefixer.md +13 -0
- package/zh/configure/app/tools/babel.md +13 -0
- package/zh/configure/app/tools/css-extract.md +13 -0
- package/zh/configure/app/tools/css-loader.md +13 -0
- package/zh/configure/app/tools/dev-server.md +13 -0
- package/zh/configure/app/tools/esbuild.md +61 -0
- package/zh/configure/app/tools/html-plugin.md +13 -0
- package/zh/configure/app/tools/inspector.md +13 -0
- package/zh/configure/app/tools/jest.md +41 -0
- package/zh/configure/app/tools/less.md +13 -0
- package/zh/configure/app/tools/minify-css.md +13 -0
- package/zh/configure/app/tools/postcss.md +13 -0
- package/zh/configure/app/tools/pug.md +13 -0
- package/zh/configure/app/tools/sass.md +13 -0
- package/zh/configure/app/tools/style-loader.md +13 -0
- package/zh/configure/app/tools/styled-components.md +13 -0
- package/zh/configure/app/tools/tailwindcss.md +48 -0
- package/zh/configure/app/tools/terser.md +13 -0
- package/zh/configure/app/tools/ts-checker.md +13 -0
- package/zh/configure/app/tools/ts-loader.md +13 -0
- package/zh/configure/app/tools/webpack-chain.md +13 -0
- package/zh/configure/app/tools/webpack.md +13 -0
- package/zh/configure/app/usage.md +81 -0
- package/zh/configure/generator/introduce.md +113 -0
- package/zh/configure/generator/module.md +43 -0
- package/zh/configure/generator/monorepo.md +28 -0
- package/zh/configure/generator/mwa.md +127 -0
- package/zh/guides/advanced-features/_category_.json +9 -0
- package/zh/guides/advanced-features/bff/_category_.json +4 -0
- package/zh/guides/advanced-features/bff/bff-proxy.md +25 -0
- package/zh/guides/advanced-features/bff/bff-server.md +142 -0
- package/zh/guides/advanced-features/bff/frameworks.md +348 -0
- package/zh/guides/advanced-features/bff/function.md +236 -0
- package/zh/guides/advanced-features/code-split.md +68 -0
- package/zh/guides/advanced-features/compatibility.md +89 -0
- package/zh/guides/advanced-features/custom-app.md +4 -0
- package/zh/guides/advanced-features/eslint.md +146 -0
- package/zh/guides/advanced-features/index.md +12 -0
- package/zh/guides/advanced-features/low-level.md +44 -0
- package/zh/guides/advanced-features/ssg.md +151 -0
- package/zh/guides/advanced-features/ssr.md +186 -0
- package/zh/guides/advanced-features/testing.md +4 -0
- package/zh/guides/advanced-features/typescript.md +4 -0
- package/zh/guides/advanced-features/web-server.md +135 -0
- package/zh/guides/basic-features/_category_.json +9 -0
- package/zh/guides/basic-features/alias.md +67 -0
- package/zh/guides/basic-features/css/_category_.json +4 -0
- package/zh/guides/basic-features/css/css-in-js.md +38 -0
- package/zh/guides/basic-features/css/css-modules.md +86 -0
- package/zh/guides/basic-features/css/less-sass.md +29 -0
- package/zh/guides/basic-features/css/postcss.md +81 -0
- package/zh/guides/basic-features/css/tailwindcss.md +98 -0
- package/zh/guides/basic-features/data-fetch.md +4 -0
- package/zh/guides/basic-features/env-vars.md +83 -0
- package/zh/guides/basic-features/html.md +128 -0
- package/zh/guides/basic-features/image.md +43 -0
- package/zh/guides/basic-features/index.md +12 -0
- package/zh/guides/basic-features/mock.md +85 -0
- package/zh/guides/basic-features/proxy.md +85 -0
- package/zh/guides/basic-features/routes.md +4 -0
- package/zh/guides/concept/_category_.json +5 -0
- package/zh/guides/concept/entries.md +4 -0
- package/zh/guides/concept/integrated.md +4 -0
- package/zh/guides/concept/lifecycle.md +4 -0
- package/zh/guides/concept/solutions.md +4 -0
- package/zh/guides/get-started/_category_.json +5 -0
- package/zh/guides/get-started/quick-start.md +4 -0
- package/zh/guides/get-started/upgrade.md +4 -0
- package/zh/guides/overview.md +11 -0
- package/zh/guides/topic-detail/_category_.json +5 -0
- package/zh/guides/topic-detail/changesets/_category_.json +4 -0
- package/zh/guides/topic-detail/changesets/add.md +125 -0
- package/zh/guides/topic-detail/changesets/changelog.md +239 -0
- package/zh/guides/topic-detail/changesets/commit.md +272 -0
- package/zh/guides/topic-detail/changesets/config.md +146 -0
- package/zh/guides/topic-detail/changesets/github.md +168 -0
- package/zh/guides/topic-detail/changesets/introduce.md +57 -0
- package/zh/guides/topic-detail/changesets/release-note.md +262 -0
- package/zh/guides/topic-detail/changesets/release-pre.md +49 -0
- package/zh/guides/topic-detail/changesets/release.md +228 -0
- package/zh/guides/topic-detail/compile-speed.md +182 -0
- package/zh/guides/topic-detail/framework-plugin/_category_.json +4 -0
- package/zh/guides/topic-detail/framework-plugin/abstract.md +27 -0
- package/zh/guides/topic-detail/framework-plugin/extend.md +163 -0
- package/zh/guides/topic-detail/framework-plugin/implement.md +188 -0
- package/zh/guides/topic-detail/framework-plugin/relationship.md +119 -0
- package/zh/guides/topic-detail/generator-plugin/_category_.json +4 -0
- package/zh/guides/topic-detail/generator-plugin/abstract.md +23 -0
- package/zh/guides/topic-detail/generator-plugin/develop.md +120 -0
- package/zh/guides/topic-detail/generator-plugin/use.md +61 -0
- package/zh/guides/topic-detail/micro-frontend/_category_.json +4 -0
- package/zh/guides/topic-detail/micro-frontend/communicate.md +39 -0
- package/zh/guides/topic-detail/micro-frontend/debugging.md +168 -0
- package/zh/guides/topic-detail/micro-frontend/introduction.md +13 -0
- package/zh/guides/topic-detail/micro-frontend/mixed-stack.md +24 -0
- package/zh/guides/topic-detail/micro-frontend/route-mode.md +110 -0
- package/zh/guides/topic-detail/model/_category_.json +4 -0
- package/zh/guides/topic-detail/model/auto-actions.md +90 -0
- package/zh/guides/topic-detail/model/computed-state.md +151 -0
- package/zh/guides/topic-detail/model/define-model.md +66 -0
- package/zh/guides/topic-detail/model/faq.md +43 -0
- package/zh/guides/topic-detail/model/manage-effects.md +259 -0
- package/zh/guides/topic-detail/model/model-communicate.md +219 -0
- package/zh/guides/topic-detail/model/performance.md +173 -0
- package/zh/guides/topic-detail/model/quick-start.md +112 -0
- package/zh/guides/topic-detail/model/redux-integration.md +21 -0
- package/zh/guides/topic-detail/model/test-model.md +43 -0
- package/zh/guides/topic-detail/model/typescript-best-practice.md +71 -0
- package/zh/guides/topic-detail/model/use-model.md +244 -0
- package/zh/guides/topic-detail/model/use-out-of-modernjs.md +51 -0
- package/zh/guides/topic-detail/monorepo/_category_.json +4 -0
- package/zh/guides/topic-detail/monorepo/create-sub-project.md +64 -0
- package/zh/guides/topic-detail/monorepo/deploy.md +43 -0
- package/zh/guides/topic-detail/monorepo/intro.md +15 -0
- package/zh/guides/topic-detail/monorepo/publish.md +68 -0
- package/zh/guides/topic-detail/monorepo/sub-project-interface.md +170 -0
- package/zh/guides/troubleshooting/_category_.json +5 -0
- package/zh/guides/troubleshooting/compile.md +379 -0
- package/zh/guides/troubleshooting/dependencies.md +168 -0
- package/zh/tutorials/first-app/_category_.json +5 -0
- package/zh/tutorials/first-app/c01-getting-started/1.1-prerequisites.md +25 -0
- package/zh/tutorials/first-app/c01-getting-started/1.2-minimal-mwa.md +118 -0
- package/zh/tutorials/first-app/c01-getting-started/1.3-dev-command.md +29 -0
- package/zh/tutorials/first-app/c01-getting-started/1.4-enable-ssr.md +44 -0
- package/zh/tutorials/first-app/c01-getting-started/1.5-start-command.md +18 -0
- package/zh/tutorials/first-app/c01-getting-started/1.6-create-repo.md +31 -0
- package/zh/tutorials/first-app/c01-getting-started/_category_.json +3 -0
- package/zh/tutorials/first-app/c02-generator-and-studio/2.1-generator.md +87 -0
- package/zh/tutorials/first-app/c02-generator-and-studio/2.2-boilerplates.md +28 -0
- package/zh/tutorials/first-app/c02-generator-and-studio/2.3-configuration.md +21 -0
- package/zh/tutorials/first-app/c02-generator-and-studio/_category_.json +3 -0
- package/zh/tutorials/first-app/c03-ide/3.1-setting-up.md +55 -0
- package/zh/tutorials/first-app/c03-ide/3.2-hints-in-ide.md +66 -0
- package/zh/tutorials/first-app/c03-ide/3.3-autofix-in-ide.md +11 -0
- package/zh/tutorials/first-app/c03-ide/3.4-autofix-in-cli.md +63 -0
- package/zh/tutorials/first-app/c03-ide/_category_.json +3 -0
- package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.1-use-es6-plus.md +67 -0
- package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.2-use-typescript.md +111 -0
- package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.3-compatibility.md +67 -0
- package/zh/tutorials/first-app/c04-es6-plus-and-ts/_category_.json +3 -0
- package/zh/tutorials/first-app/c05-component/5.1-use-ui-library.md +68 -0
- package/zh/tutorials/first-app/c05-component/5.2-use-standalone-component.md +92 -0
- package/zh/tutorials/first-app/c05-component/_category_.json +3 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.1-css-in-js.md +110 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.2-utility-class.md +148 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.3-postcss.md +84 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.4-design-system.md +83 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.5-storybook.md +77 -0
- package/zh/tutorials/first-app/c06-css-and-component/6.6-testing.md +113 -0
- package/zh/tutorials/first-app/c06-css-and-component/_category_.json +3 -0
- package/zh/tutorials/first-app/c07-app-entry/7.1-intro.md +64 -0
- package/zh/tutorials/first-app/c07-app-entry/7.2-add-entry-in-cli.md +104 -0
- package/zh/tutorials/first-app/c07-app-entry/7.3-manage-entries-by-hand.md +74 -0
- package/zh/tutorials/first-app/c07-app-entry/_category_.json +3 -0
- package/zh/tutorials/first-app/c08-client-side-routing/8.1-code-based-routing.md +153 -0
- package/zh/tutorials/first-app/c08-client-side-routing/8.2-file-based-routing.md +318 -0
- package/zh/tutorials/first-app/c08-client-side-routing/_category_.json +3 -0
- package/zh/tutorials/first-app/c09-bff/9.1-serverless.md +30 -0
- package/zh/tutorials/first-app/c09-bff/9.2-enable-bff.md +93 -0
- package/zh/tutorials/first-app/c09-bff/9.3-fetch-bff.md +205 -0
- package/zh/tutorials/first-app/c09-bff/_category_.json +3 -0
- package/zh/tutorials/first-app/c10-model/10.1-application-architecture.md +23 -0
- package/zh/tutorials/first-app/c10-model/10.2-add-model.md +185 -0
- package/zh/tutorials/first-app/c10-model/10.3-use-model.md +54 -0
- package/zh/tutorials/first-app/c10-model/10.4-testing.md +69 -0
- package/zh/tutorials/first-app/c10-model/_category_.json +3 -0
- package/zh/tutorials/first-app/c11-container/11.1-use-model-with-app-state.md +274 -0
- package/zh/tutorials/first-app/c11-container/11.2-add-container.md +106 -0
- package/zh/tutorials/first-app/c11-container/11.3-use-loader.md +61 -0
- package/zh/tutorials/first-app/c11-container/11.4-testing.md +56 -0
- package/zh/tutorials/first-app/c11-container/_category_.json +3 -0
- package/zh/tutorials/first-app/overview.md +11 -0
- package/zh/tutorials/foundations/_category_.json +5 -0
- package/zh/tutorials/foundations/basic.md +8 -0
- package/zh/tutorials/foundations/introduction.md +41 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: IDE 中的自动提示
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
打开任意 JS/TS 文件(比如 `src/App.jsx`),底部状态栏右侧应该有显示 ESLint,点击可以看到运行 log,应该没有报错。
|
|
6
|
+
|
|
7
|
+
接下来对 `App.jsx` 代码做如下修改(修改过程中不要保存),增加无用的函数参数、去掉换行、单引号改成双引号、增加缩进(可以直接复制下面的代码替换 App.jsx 的内容),注意修改过程中**先不要保存文件**。
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import { Switch, Route } from '@modern-js/runtime/router';
|
|
11
|
+
|
|
12
|
+
import './App.css';
|
|
13
|
+
|
|
14
|
+
const App = (a) => (
|
|
15
|
+
<Switch>
|
|
16
|
+
<Route exact={true} path="/">
|
|
17
|
+
<div className="container-box">
|
|
18
|
+
<main>
|
|
19
|
+
<div className='logo'>
|
|
20
|
+
<img
|
|
21
|
+
src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ylaelkeh7nuhfnuhf/modernjs-cover.png"
|
|
22
|
+
width="300"
|
|
23
|
+
alt="Modern.js Logo"
|
|
24
|
+
/>
|
|
25
|
+
</div>
|
|
26
|
+
<p className="description">
|
|
27
|
+
Get started by editing <code className="code">src/App.tsx</code>
|
|
28
|
+
</p>
|
|
29
|
+
<div className="grid">
|
|
30
|
+
<a href="#" className="card">
|
|
31
|
+
<h2>Quick Start</h2>
|
|
32
|
+
</a>
|
|
33
|
+
<a href="#" className="card">
|
|
34
|
+
<h2>Handbook</h2>
|
|
35
|
+
</a>
|
|
36
|
+
<a href="#" className="card">
|
|
37
|
+
<h2>API Reference </h2>
|
|
38
|
+
</a>
|
|
39
|
+
<a
|
|
40
|
+
href="#"
|
|
41
|
+
target="_blank"
|
|
42
|
+
rel="noopener noreferrer"
|
|
43
|
+
className="card">
|
|
44
|
+
<h2>Community </h2>
|
|
45
|
+
</a>
|
|
46
|
+
</div>
|
|
47
|
+
</main>
|
|
48
|
+
<footer className="footer">
|
|
49
|
+
<a href="#" target="_blank" rel="noopener noreferrer">
|
|
50
|
+
Powered by Modern.JS
|
|
51
|
+
</a>
|
|
52
|
+
</footer>
|
|
53
|
+
</div>
|
|
54
|
+
</Route>
|
|
55
|
+
<Route path="*">
|
|
56
|
+
<div>404</div>
|
|
57
|
+
</Route>
|
|
58
|
+
</Switch>
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
export default App;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
可以在 VS Code 中看到修改过的代码出现了问题提示,点击底部界面中的 Problems 一栏,可以看到问题列表。
|
|
65
|
+
|
|
66
|
+

|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: IDE 中的自动修复
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
直接保存当前文件(CMD/Ctrl + S),应该会看到代码风格相关的问题都自动被修复了(有时每次保存只能修复一部分,需要多保存几次,直到没变化)。
|
|
6
|
+
|
|
7
|
+
只剩下**无用的函数参数**问题,需要人工修复:
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
问题提示中,显示了这个问题来自 ESLint 的 `no-unused-vars` 规则,带下划线的是 ESLint 规则名称,按住 CMD/Alt 键点击,可以打开这条规则的文档,查看问题的解释和解决方法。
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 命令行中的自动修复
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
提交前的自动准入检查,跟 VS Code 里的保存一样,会尽可能自动格式化代码和修复问题,只有遇到无法自动修复的问题,才会报错阻止提交。
|
|
6
|
+
|
|
7
|
+
我们添加一段可自动修复的问题代码(如果在 VS Code 里添加,保存时会自动修复,所以用 CLI 来添加):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
echo ';' >> src/App.jsx
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
打开 `App.jsx`,可以看到末尾多了一个 ';',有问题提示。
|
|
14
|
+
|
|
15
|
+
提交代码:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git commit -am "test: 再次测试准入检查"
|
|
19
|
+
git status
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
可以看到虽然仍然提交失败,但新增的问题被自动修复了。
|
|
23
|
+
|
|
24
|
+
手动把参数 a 的问题修复(删除 a),再次添加 ';',提交代码:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
echo ';' >> src/App.jsx
|
|
28
|
+
git commit -am "test: 再次测试准入检查"
|
|
29
|
+
git log HEAD --stat --graph --name-status
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
可以看到提交成功了,新增的问题被自动修复,并且自动被 stage。
|
|
33
|
+
|
|
34
|
+
:::info 注
|
|
35
|
+
在真实项目的开发中,对于以下情况,可以在提交时增加 -n 或 --no-verify 参数,破例跳过准入检查:
|
|
36
|
+
1. Hotfix
|
|
37
|
+
2. merge 过程中解决了冲突,变更的文件里包含别人的代码
|
|
38
|
+
3. 旧项目迁移到 Modern.js,最初做统一自动修复的提交
|
|
39
|
+
:::
|
|
40
|
+
|
|
41
|
+
提交前的自动准入检查,只会检查和修复这次提交中有变更的文件(已经 stage 的文件),也就是说,只会强制要求这次工作过程中修改过的文件没有问题,不会要求你去解决这次工作无关的文件的问题。
|
|
42
|
+
|
|
43
|
+
如果要对整个仓库的所有文件做 lint 检查和自动修复,可以手动执行 `lint` 命令,比如:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
echo ';' >> src/App.jsx
|
|
47
|
+
pnpm run lint
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
:::info 注
|
|
51
|
+
上述命令速度慢,不常用。旧项目刚迁移到 Modern.js 框架的时候,可以用这个命令对所有代码做一次自动修复,单独提交。
|
|
52
|
+
:::
|
|
53
|
+
|
|
54
|
+
本章节中,我们完成了编程环境的初始化和检查,熟悉了相关功能。下一章节开始,我们就可以开始写代码了。
|
|
55
|
+
|
|
56
|
+
:::info 注
|
|
57
|
+
Modern.js 是用 [Modern Lint](/docs/guides/advanced-features/eslint) 规则集来实现上述能力, 集成了 ESLint、TypeScript 支持、Prettier 等主流工具和最佳实践。
|
|
58
|
+
:::
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
> 本章节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c03/hello-modern)。
|
|
63
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 使用 ES6+ 语法
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
上一章节中,我们确认了当前 IDE 的编程环境。
|
|
6
|
+
|
|
7
|
+
这一章节中,我们沿用上一章节的项目和编码环境,实现一个最简单的联系人列表。
|
|
8
|
+
|
|
9
|
+
Modern.js 支持 `src` 目录下直接使用 ES6+(ES2015+)语法,原则上包括:
|
|
10
|
+
|
|
11
|
+
1. 已经进入 [Stage 4(完成阶段)](https://github.com/tc39/proposals/blob/master/finished-proposals.md)的语法,包括 ES2015(ES6)到 ES2020(ES11)以及后续版本。
|
|
12
|
+
2. 部分很有用且确定性较强(重构也容易)的 [Stage 1(提案阶段)](https://github.com/tc39/proposals/blob/master/stage-1-proposals.md)、[Stage 2(草案阶段)](https://github.com/tc39/proposals#stage-2)、[Stage 3(候选阶段)](https://github.com/tc39/proposals#stage-3)语法,比如:
|
|
13
|
+
|
|
14
|
+
- [Decorators](https://babeljs.io/docs/en/babel-plugin-proposal-decorators)(默认使用 legacy 提案,可通过 `output.enableLatestDecorators` 使用新版提案)
|
|
15
|
+
- [Class Public Properties](https://babeljs.io/docs/en/babel-plugin-proposal-class-properties)
|
|
16
|
+
- [Class Private Properties](https://babeljs.io/docs/en/babel-plugin-proposal-private-property-in-object)、[Class Private Methods](https://babeljs.io/docs/en/babel-plugin-proposal-private-methods)
|
|
17
|
+
- [Pipeline Operator](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator)(默认为 minimal 提案)
|
|
18
|
+
- [Partial Application](https://babeljs.io/docs/en/babel-plugin-proposal-partial-application)
|
|
19
|
+
- [Bind Operator](https://babeljs.io/docs/en/babel-plugin-proposal-function-bind)
|
|
20
|
+
- [export default from](https://babeljs.io/docs/en/babel-plugin-proposal-export-default-from), [export namespace from](https://babeljs.io/docs/en/babel-plugin-proposal-export-namespace-from)
|
|
21
|
+
- [Optional Catch Binding](https://babeljs.io/docs/en/babel-plugin-proposal-optional-catch-binding)
|
|
22
|
+
- [Numeric Separator](https://babeljs.io/docs/en/babel-plugin-proposal-numeric-separator)
|
|
23
|
+
|
|
24
|
+
我们把 `src/App.jsx` 改成:
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
const getAvatar = users =>
|
|
28
|
+
users.map(user => ({
|
|
29
|
+
...user,
|
|
30
|
+
avatar: `https://avatars.dicebear.com/v2/identicon/${user.name}.svg`,
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
const mockData =
|
|
34
|
+
[
|
|
35
|
+
{ name: 'Thomas', email: 'w.kccip@bllmfbgv.dm' },
|
|
36
|
+
{ name: 'Chow', email: 'f.lfqljnlk@ywoefljhc.af' },
|
|
37
|
+
{ name: 'Bradley', email: 'd.wfovsqyo@gpkcjwjgb.fr' },
|
|
38
|
+
{ name: 'Davis', email: '"t.kqkoj@utlkwnpwk.nu' },
|
|
39
|
+
] |> getAvatar;
|
|
40
|
+
|
|
41
|
+
function App() {
|
|
42
|
+
return (
|
|
43
|
+
<ul>
|
|
44
|
+
{mockData.map(({ name, avatar, email }) => (
|
|
45
|
+
<li key={name}>
|
|
46
|
+
<img src={avatar} width={60} height={60} /> ---
|
|
47
|
+
<span>{name}</span> ---
|
|
48
|
+
<span>{email}</span>
|
|
49
|
+
</li>
|
|
50
|
+
))}
|
|
51
|
+
</ul>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default App;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
可以看到其中使用了多种 ES6+ 语法(注意生成 mockData 过程中使用了 [Pipeline Operator](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator) 语法),都不需要做任何配置。
|
|
59
|
+
|
|
60
|
+
运行 `pnpm run dev`,查看运行结果:
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c04/hello-modern)。
|
|
67
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 使用 TypeScript 语法
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Modern.js 同样对 TypeScript 提供了一等公民、开箱即用的支持。
|
|
6
|
+
|
|
7
|
+
这一小节,我们将当前为 ES6+ 语法的 Demo 修改为 TypeScript 语法。
|
|
8
|
+
|
|
9
|
+
在项目根目录下执行:
|
|
10
|
+
|
|
11
|
+
import Tabs from '@theme/Tabs';
|
|
12
|
+
import TabItem from '@theme/TabItem';
|
|
13
|
+
|
|
14
|
+
<Tabs>
|
|
15
|
+
<TabItem value="macOS" label="macOS" default>
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mv src/App.jsx src/App.tsx
|
|
19
|
+
|
|
20
|
+
pnpm add typescript @types/react @types/react-dom @types/node -D
|
|
21
|
+
|
|
22
|
+
touch tsconfig.json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
</TabItem>
|
|
26
|
+
<TabItem value="Windows" label="Windows">
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
mv src/App.jsx src/App.tsx
|
|
30
|
+
|
|
31
|
+
pnpm add typescript @types/react @types/react-dom @types/node -D
|
|
32
|
+
|
|
33
|
+
ni tsconfig.json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
</TabItem>
|
|
37
|
+
</Tabs>
|
|
38
|
+
|
|
39
|
+
:::info 注
|
|
40
|
+
接下来所有章节的项目,都会使用 TS 来进行开发。
|
|
41
|
+
:::
|
|
42
|
+
|
|
43
|
+
`tsconfig.json` 内容如下:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"extends": "@modern-js/tsconfig/base",
|
|
48
|
+
"compilerOptions": {
|
|
49
|
+
"declaration": false,
|
|
50
|
+
"jsx": "preserve",
|
|
51
|
+
"baseUrl": "./",
|
|
52
|
+
"paths": {
|
|
53
|
+
"@/*": ["./src/*"]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"include": ["src", "shared", "config"]
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
打开 `src/App.tsx`,把代码改成以下内容:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import React from 'react';
|
|
64
|
+
|
|
65
|
+
const getAvatar = (users: Array<{ name: string; email: string }>) =>
|
|
66
|
+
users.map(user => ({
|
|
67
|
+
...user,
|
|
68
|
+
avatar: `https://avatars.dicebear.com/v2/identicon/${user.name}.svg`,
|
|
69
|
+
}));
|
|
70
|
+
|
|
71
|
+
const mockData = getAvatar([
|
|
72
|
+
{ name: 'Thomas', email: 'w.kccip@bllmfbgv.dm' },
|
|
73
|
+
{ name: 'Chow', email: 'f.lfqljnlk@ywoefljhc.af' },
|
|
74
|
+
{ name: 'Bradley', email: 'd.wfovsqyo@gpkcjwjgb.fr' },
|
|
75
|
+
{ name: 'Davis', email: '"t.kqkoj@utlkwnpwk.nu' },
|
|
76
|
+
]);
|
|
77
|
+
|
|
78
|
+
function App() {
|
|
79
|
+
return (
|
|
80
|
+
<ul>
|
|
81
|
+
{mockData.map(({ name, avatar, email }) => (
|
|
82
|
+
<li key={name}>
|
|
83
|
+
<img src={avatar} width={60} height={60} /> ---
|
|
84
|
+
<span>{name}</span> ---
|
|
85
|
+
<span>{email}</span>
|
|
86
|
+
</li>
|
|
87
|
+
))}
|
|
88
|
+
</ul>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export default App;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
可以看到,跟 ES6+ 的代码相比有以下不同:
|
|
96
|
+
|
|
97
|
+
1. 由于 TS 还不支持 [Pipeline Operator](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator) 语法,需要把 mockData 的生成过程改成普通的函数调用语法。
|
|
98
|
+
2. 需要声明 `getAvatar` 参数的类型。
|
|
99
|
+
|
|
100
|
+
在 VS Code 里,把鼠标悬停在 `mockData` 上,可以看到它的类型已经被自动推导出来。如果把 `key={name}` 改成 `key={name * 2}`,可以看到 TS 的报错。
|
|
101
|
+
|
|
102
|
+
运行 `pnpm run dev`,可以看到一样的运行结果。
|
|
103
|
+
|
|
104
|
+
:::info 注
|
|
105
|
+
更简单、开箱即用的方式,是在创建项目的时候,**开发语言**选择 TS,会自动生成上述样板代码,源代码文件也会自动默认采用 .ts 和 .tsx。
|
|
106
|
+
:::
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c04/hello-modern-2)。
|
|
111
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 客户端兼容性
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
前两个小节我们学习了如何使用 ES6+ 与 TypeScript 语法来编写应用。
|
|
6
|
+
|
|
7
|
+
这一小节,我们来学习如何在 Modern.js 中解决客户端兼容性的问题。
|
|
8
|
+
|
|
9
|
+
在实际项目中,往往会因为需要兼容老版本浏览器,而无法利用现代浏览器的最新特性与最佳实践。
|
|
10
|
+
|
|
11
|
+
Modern.js 提供了开箱即用的解决客户端兼容性的能力,支持自动 Polyfill、Browserslist 配置、差异化分发。
|
|
12
|
+
|
|
13
|
+
我们首先使用微生成器开启该功能:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
? 请选择你想要的操作:启用可选功能
|
|
17
|
+
? 启用可选功能:启用「基于 UA 的 Polyfill」功能
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
接着我们修改 `modern.config.js`,添加以下配置:
|
|
21
|
+
|
|
22
|
+
```js title="modern.config.js"
|
|
23
|
+
export default defineConfig({
|
|
24
|
+
output: {
|
|
25
|
+
polyfill: 'ua',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
以上配置将会开启「 自动 Polyfill 」,Modern.js 会根据浏览器对规范的支持程度,返回不同内容的 polyfill,我们不需要再担心低版本浏览器对新版本浏览器的拖累。
|
|
31
|
+
|
|
32
|
+
执行 `pnpm run dev`,可以看到浏览器中请求了当前服务上 `/__polyfill__` 这一资源,但是当前请求到的资源是空的:
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
我们切换到 Chrome Mobile 模式,选择设备为 iPhone 5/SE,重新刷新页面,可以看到请求到了有内容的资源:
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
:::info 注
|
|
41
|
+
如果遇到无法识别的浏览器,Modern.js 将会返回全量的 polyfill。
|
|
42
|
+
:::
|
|
43
|
+
|
|
44
|
+
接下里我们继续修改 `modern.config.js`:
|
|
45
|
+
|
|
46
|
+
```js title="modern.config.js"
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
output: {
|
|
49
|
+
enableModernMode: true,
|
|
50
|
+
polyfill: 'ua',
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
以上配置将会开启「 差异化分发 」,在原生支持模块功能的浏览器中,Modern.js 优先使用带有 ESM 模块语法静态资源的 HTML,浏览器能够最优化的加载模块,带来更好的页面性能。
|
|
56
|
+
|
|
57
|
+
执行 `pnpm run build && pnpm run start`,打开页面,可以看到已经加载了带有 `-es6` 后缀的资源文件:
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+
|
|
61
|
+
:::info 注
|
|
62
|
+
更多相关内容可以查看 [**客户端兼容性**](/docs/guides/advanced-features/compatibility)。
|
|
63
|
+
:::
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c04/hello-modern-3)。
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 使用主流组件库
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
上一章节中,我们学习了如何使用 ES6+ 与 TypeScript 语法编写 Modern.js 应用。
|
|
6
|
+
|
|
7
|
+
这一章节中,我们继续沿用上一章节的项目代码(注意是 TS 代码,不是 ES6+ 代码),继续完善联系人列表。
|
|
8
|
+
|
|
9
|
+
为了做更好的 UI 展示和交互,我们引入主流的组件库 Ant Design 来开发,使用 List 组件来代替原始的列表。
|
|
10
|
+
|
|
11
|
+
先添加依赖:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm add antd
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
之前章节介绍过,Modern.js 支持在项目创建后继续为项目增加功能,我们执行 `pnpm run new`,进行如下选择,开启 Less 支持。
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 启用可选功能
|
|
21
|
+
启用 Tailwind CSS 支持
|
|
22
|
+
❯ 启用 Less 支持
|
|
23
|
+
启用 Sass 支持
|
|
24
|
+
...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
修改 `src/App.tsx`,在顶部导入组件:
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
import { List } from 'antd';
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
修改 App 组件的实现:
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
function App() {
|
|
37
|
+
return (
|
|
38
|
+
<div>
|
|
39
|
+
<List
|
|
40
|
+
dataSource={mockData}
|
|
41
|
+
renderItem={({ name, email, avatar }) => (
|
|
42
|
+
<List.Item key={name}>
|
|
43
|
+
<List.Item.Meta
|
|
44
|
+
avatar={<img alt="avatar" src={avatar} width={60} height={60} />}
|
|
45
|
+
title={name}
|
|
46
|
+
description={email}
|
|
47
|
+
/>
|
|
48
|
+
</List.Item>
|
|
49
|
+
)}
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
执行 `pnpm run dev`,查看运行结果:
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
可以看到 Ant Design 导出的组件,已经具备了完整的样式。
|
|
61
|
+
|
|
62
|
+
:::info 注
|
|
63
|
+
Modern.js 会[自动按需导入 Ant Design 组件需要的 CSS](https://github.com/ant-design/babel-plugin-import)。
|
|
64
|
+
:::
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c05/hello-modern)。
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 使用独立开源组件
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
上一小节我们使用 Ant Design 组件库中的组件来实现列表。
|
|
6
|
+
|
|
7
|
+
这一小节我们用独立开源组件来实现联系人的操作按钮。
|
|
8
|
+
|
|
9
|
+
以按钮库 [Ladda](https://lab.hakim.se/ladda/) 的 [React 实现](https://www.npmjs.com/package/react-ladda) 为例,先添加依赖:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add react-ladda ladda
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
在 `src/App.tsx` 里导入组件,同时手动导入需要的 CSS:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import LaddaButton, { S, SLIDE_UP } from 'react-ladda';
|
|
19
|
+
import 'ladda/dist/ladda.min.css';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
修改 `List.Item` 组件的调用代码,添加 actions:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
<List.Item
|
|
26
|
+
key={name}
|
|
27
|
+
actions={[
|
|
28
|
+
<LaddaButton
|
|
29
|
+
key={email}
|
|
30
|
+
loading={false}
|
|
31
|
+
data-size={S}
|
|
32
|
+
data-style={SLIDE_UP}
|
|
33
|
+
data-spinner-size={20}
|
|
34
|
+
data-spinner-color="#ddd"
|
|
35
|
+
data-spinner-lines={8}>
|
|
36
|
+
Call
|
|
37
|
+
</LaddaButton>
|
|
38
|
+
]}>
|
|
39
|
+
<List.Item.Meta
|
|
40
|
+
avatar={<img alt="avatar" src={avatar} width={60} height={60} />}
|
|
41
|
+
title={name}
|
|
42
|
+
description={email}
|
|
43
|
+
/>
|
|
44
|
+
</List.Item>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`react-ladda` 组件库没有提供 types 文件,我们添加一个 `.d.ts` 文件:
|
|
48
|
+
|
|
49
|
+
import Tabs from '@theme/Tabs';
|
|
50
|
+
import TabItem from '@theme/TabItem';
|
|
51
|
+
|
|
52
|
+
<Tabs>
|
|
53
|
+
<TabItem value="macOS" label="macOS" default>
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
touch src/modern-app-env.d.ts
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
</TabItem>
|
|
60
|
+
<TabItem value="Windows" label="Windows">
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
ni src/modern-app-env.d.ts
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
</TabItem>
|
|
67
|
+
</Tabs>
|
|
68
|
+
|
|
69
|
+
在 `modern-app-env.d.ts` 中添加模块定义:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
declare module 'react-ladda' {
|
|
73
|
+
const LaddaButton: any;
|
|
74
|
+
export default LaddaButton;
|
|
75
|
+
export const S: any;
|
|
76
|
+
export const SLIDE_UP: any;
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
执行 `pnpm run dev`,查看运行结果:
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
:::info 注
|
|
85
|
+
CSS 文件会自动经过 Modern.js 内置的 [PostCSS](/docs/guides/basic-features/css/postcss) 的处理,能够满足大多数项目的样式开发需求。
|
|
86
|
+
|
|
87
|
+
Modern.js 也支持导入 SCSS、Less 文件。此外,有的组件使用 CSS in JS,不需要额外导入样式文件,下一节会有相关介绍。
|
|
88
|
+
:::
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c05/hello-modern-2)。
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 用 CSS in JS 写组件
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
上一章节中,我们学习了如何使用 UI 组件库、标准三方库中的组件。
|
|
6
|
+
|
|
7
|
+
这一章节中,我们将学习如何实现 UI 组件。
|
|
8
|
+
|
|
9
|
+
首先我们希望自己控制联系人头像的展示,实现这种设计稿:
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
假设没有现成的组件可以实现,那就需要自己写些 CSS 了,传统上,我们有如下选择:
|
|
14
|
+
|
|
15
|
+
1. 直接在元素的 style 属性上写样式,缺点是:不方便维护,UI 视觉上的细节也会跟 UI 结构上的细节和业务逻辑混在一起。
|
|
16
|
+
2. 在 CSS 代码里用选择器找到这个头像元素,写样式,避免了 1 的缺点,但新的缺点是:不方便在其他有头像出现的地方复用,集中维护,做到 [DRY](https://en.wikipedia.org/wiki/Don't_repeat_yourself)。
|
|
17
|
+
3. 在 CSS 代码里写一个 classname,封装这个样式,避免了 2 的缺点,但新的缺点是:需要考虑命名问题,避免在全局命名空间下重名,可能要用到 [BEM](http://getbem.com/) 之类的规范。
|
|
18
|
+
4. 用 CSS Modules 技术,让 CSS 文件和其中的 classname 变得【 模块化 】,避免了 3 的缺点。
|
|
19
|
+
|
|
20
|
+
Modern.js 开箱即用的支持 CSS Modules,但我们更推荐优先采用 CSS Modules 的继承者、在【 模块化 】上更进一步的 [styled-components](https://styled-components.com/),来实现类似的需求。
|
|
21
|
+
|
|
22
|
+
Modern.js 同样开箱即用的支持 styled-components,既不需要安装依赖,也不需要做任何配置。
|
|
23
|
+
|
|
24
|
+
在 `src/App.tsx` 里修改顶部的代码:
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
import styled from '@modern-js/runtime/styled';
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
添加以下代码:
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const Avatar = styled.img`
|
|
34
|
+
width: 50px;
|
|
35
|
+
height: 50px;
|
|
36
|
+
border: 4px solid #0ef;
|
|
37
|
+
border-radius: 50%;
|
|
38
|
+
`;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
修改 `List.Item.Meta` 的代码:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<List.Item.Meta
|
|
45
|
+
avatar={<Avatar src={avatar} />}
|
|
46
|
+
title={name}
|
|
47
|
+
description={email}
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
执行 `pnpm run dev`,可以看到预期的运行结果:
|
|
52
|
+
|
|
53
|
+

|
|
54
|
+
|
|
55
|
+
接下来我们做一点重构,为了增强可读性,让代码更容易维护,可以把 Avatar 组件拆分出去
|
|
56
|
+
|
|
57
|
+
在终端执行以下命令:
|
|
58
|
+
|
|
59
|
+
import Tabs from '@theme/Tabs';
|
|
60
|
+
import TabItem from '@theme/TabItem';
|
|
61
|
+
|
|
62
|
+
<Tabs>
|
|
63
|
+
<TabItem value="macOS" label="macOS" default>
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
mkdir -p src/components/Avatar
|
|
67
|
+
touch src/components/Avatar/index.tsx
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
</TabItem>
|
|
71
|
+
<TabItem value="Windows" label="Windows">
|
|
72
|
+
|
|
73
|
+
```powershell
|
|
74
|
+
mkdir -p src/components/Avatar
|
|
75
|
+
ni src/components/Avatar/index.tsx
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
</TabItem>
|
|
79
|
+
</Tabs>
|
|
80
|
+
|
|
81
|
+
把 `src/App.tsx` 里的 Avatar 实现删掉,改成:
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
import Avatar from './components/Avatar';
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`src/components/Avatar/index.tsx` 的内容:
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
import styled from '@modern-js/runtime/styled';
|
|
91
|
+
|
|
92
|
+
const Avatar = styled.img`
|
|
93
|
+
width: 50px;
|
|
94
|
+
height: 50px;
|
|
95
|
+
border: 4px solid #0ef;
|
|
96
|
+
border-radius: 50%;
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
export default Avatar;
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
执行 `pnpm run dev`,运行结果应该是一样的。
|
|
103
|
+
|
|
104
|
+
:::info 注
|
|
105
|
+
采用目录形式(Avatar/index.tsx)而不是单文件形式(Avatar.tsx)的原因是,之后可以方便在目录内部增加子文件,包括专用的资源(图片等)、专用子组件、CSS 文件等,在这个**黑盒**内部可以随意重构,只考虑**最小局部**。
|
|
106
|
+
:::
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c06/hello-modern)。
|