此示例展示如何使用 TinyMCE React 组件,将 TinyMCE 从 .zip 包中自托管并打包到 React 应用程序中。
前提条件
此过程需要 Node.js(和 NPM)。
操作步骤
使用 Vite 和 React SWC 创建一个名为
tinymce-react-demo的新 React 项目。# NPM 7+, extra double-dash is needed npm create vite@5 tinymce-react-demo -- --template react-swc
进入项目目录并安装
@tinymce/tinymce-reactcd tinymce-react-demo && npm install @tinymce/tinymce-react
安装
script-loader包。npm install script-loader
将 TinyMCE zip 中
tinymce/js文件夹的内容解压到src文件夹。在
Diff of+./eslint.config.js文件中,将'src/tinymce'添加到ignores数组中。.eslint.config.jsdiff --git a/eslint.config.js b/eslint.config.js index 092408a..1ab8db4 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -5,7 +5,7 @@ import reactRefresh from 'eslint-plugin-react-refresh' import tseslint from 'typescript-eslint' export default tseslint.config( - { ignores: ['dist'] }, + { ignores: ['dist', 'src/tinymce'] }, { extends: [js.configs.recommended, ...tseslint.configs.recommended], files: ['**/*.{ts,tsx}'],安装
vite-plugin-commonjs并更新vite.config.ts文件以启用对CommonJS模块的支持。import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import commonjs from 'vite-plugin-commonjs'; // https://vite.dev/config/ export default defineConfig({ plugins: [react(), commonjs()], });创建
./src/BundledEditor.jsx并包含以下代码片段:import { Editor } from '@tinymce/tinymce-react'; // Ensure to import `tinymce` first as other components expect // a global variable `tinymce` to exist import './tinymce/tinymce'; // DOM model import './tinymce/models/dom/model' // Theme import './tinymce/themes/silver'; // Toolbar icons import './tinymce/icons/default'; // Editor styles import './tinymce/skins/ui/oxide/skin'; // Content styles, including inline UI like fake cursors import './tinymce/skins/content/default/content'; import './tinymce/skins/ui/oxide/content'; // Import plugins import './tinymce/plugins/anchor'; import './tinymce/plugins/advlist'; import './tinymce/plugins/autolink'; import './tinymce/plugins/charmap'; import './tinymce/plugins/code'; import './tinymce/plugins/media'; import './tinymce/plugins/visualblocks'; import './tinymce/plugins/fullscreen'; import './tinymce/plugins/insertdatetime'; import './tinymce/plugins/preview'; import './tinymce/plugins/help'; // Include resources that a plugin lazy-loads at the run-time import './tinymce/plugins/help/js/i18n/keynav/en'; import './tinymce/plugins/image'; import './tinymce/plugins/link'; import './tinymce/plugins/lists'; import './tinymce/plugins/searchreplace'; import './tinymce/plugins/table'; import './tinymce/plugins/wordcount'; export default function BundledEditor(props) { return ( <Editor licenseKey='gpl' {...props} /> ); }将带有配置的
BundleEditor组件添加到App.jsx中。import { useRef } from 'react'; import BundledEditor from './BundledEditor' import './App.css'; export default function App() { const editorRef = useRef(null); const log = () => { if (editorRef.current) { console.log(editorRef.current.getContent()); } }; return ( <> <BundledEditor onInit={(_evt, editor) => editorRef.current = editor} initialValue='<p>This is the initial content of the editor.</p>' init={{ height: 500, menubar: false, plugins: [ 'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'anchor', 'searchreplace', 'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'preview', 'help', 'wordcount' ], toolbar: 'undo redo | blocks | ' + 'bold italic forecolor | alignleft aligncenter ' + 'alignright alignjustify | bullist numlist outdent indent | ' + 'removeformat | help', content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }' }} /> <button onClick={log}>Log editor content</button> </> ); }运行开发服务器以测试应用程序:
npm run dev
其他资源
有关打包的信息,请参阅:打包 TinyMCE 简介
有关 TinyMCE React 集成的示例,请参阅:tinymce-react storybook。
有关集成 TinyMCE 高级插件的指南,请参阅:使用高级插件。
有关自定义的信息:
TinyMCE 集成,请参阅:TinyMCE React 集成技术参考。
TinyMCE,请参阅:基本设置。
React 应用程序,请参阅:使用 Vite 入门 或 React 文档。