以下步骤将帮助您使用 CommonJS 语法 将 TinyMCE 的 .zip 版本与 Webpack 打包。本过程假定用户具备 Webpack 和 CommonJS 语法 的使用经验。以下步骤提供了一个使用 Webpack 打包基本 TinyMCE 配置的可运行示例。
要求
本指南需要以下内容:
Node.js 和 NPM
如何使用 Webpack 的基础知识
过程
下载并解压最新版本的 TinyMCE:
对于可访问 premium 自托管 TinyMCE 的客户,从 Tiny Account: Downloads 下载
.zip文件。对于其他所有用户,从 TinyMCE Self-hosted releases 下载 TinyMCE Dev Package。
将以下依赖项添加到项目中。
例如:
npm install --save-dev \ webpack \ webpack-cli \ mini-css-extract-plugin \ html-webpack-plugin \ css-loader
创建一个新的源文件,用于从 TinyMCE 导入所需组件并配置编辑器。
示例
src/editor.js/* 导入 TinyMCE */ const tinymce = require('../tinymce/js/tinymce/tinymce.js'); /* 需要默认图标。之后,如有需要,导入自定义图标 */ require('../tinymce/js/tinymce/icons/default/icons.js'); /* 所需的 TinyMCE 组件 */ require('../tinymce/js/tinymce/themes/silver/theme.js'); require('../tinymce/js/tinymce/models/dom/model.js'); /* 导入默认皮肤(oxide)。如有需要,可替换为自定义皮肤。 */ require('../tinymce/js/tinymce/skins/ui/oxide/skin.css'); /* 导入插件 - 在 'plugins' 选项中包含相关插件。 */ require('../tinymce/js/tinymce/plugins/advlist'); require('../tinymce/js/tinymce/plugins/code'); require('../tinymce/js/tinymce/plugins/emoticons'); require('../tinymce/js/tinymce/plugins/emoticons/js/emojis'); require('../tinymce/js/tinymce/plugins/link'); require('../tinymce/js/tinymce/plugins/lists'); require('../tinymce/js/tinymce/plugins/table'); require('../tinymce/js/tinymce/plugins/help'); require('../tinymce/js/tinymce/plugins/help/js/i18n/keynav/en'); /* 需要 content UI CSS(使用默认 oxide 皮肤) */ const contentUiSkinCss = require('../tinymce/js/tinymce/skins/ui/oxide/content.css'); /* 默认的 content CSS 可以更改或替换为适合编辑器内容的 CSS。 */ const contentCss = require('../tinymce/js/tinymce/skins/content/default/content.css'); /* 初始化 TinyMCE */ exports.render = () => { tinymce.init({ selector: 'textarea#editor', license_key: 'gpl', /* 所有插件都需要导入并添加到 plugins 选项中。 */ plugins: 'advlist code emoticons link lists table help', toolbar: 'bold italic | bullist numlist | link emoticons', skin: false, content_css: false, content_style: contentUiSkinCss.toString() + '\n' + contentCss.toString(), /* 可选:配置 external_plugins 以延迟加载 premium 插件 * 删除要延迟加载的任何 premium 插件的 import 或 require 语句, * 然后取消注释并配置下面的 external_plugins: */ // external_plugins: { // 'advcode': '/plugins/advcode/plugin.min.js', // 'tinycomments': '/plugins/tinycomments/plugin.min.js' // }, }); };gpl许可证密钥用于在 GNU 通用公共许可证 (GPL) 下自托管 TinyMCE。要使用商业许可证或包含 premium 插件,请将gpl替换为有效的许可证密钥。有关详细信息,请参阅 Setting the license。更新项目的 Webpack 配置,以加载 TinyMCE CSS 并优化 TinyMCE 资源。
示例
webpack.config.jsconst path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode: 'development', entry: './src/index.js', resolve: { extensions: ['.js'] }, plugins: [ new MiniCssExtractPlugin(), new HtmlWebpackPlugin({ title: 'TinyMCE Webpack Demo', meta: { viewport: 'width=device-width, initial-scale=1' } }), ], module: { rules: [ { test: /skin\.css$/i, use: [ MiniCssExtractPlugin.loader, 'css-loader' ], }, { test: /content\.css$/i, loader: 'css-loader', options: { esModule: false, }, }, ], }, optimization: { splitChunks: { chunks: 'all', cacheGroups: { tinymceVendor: { test: /[\\/](tinymce)[\\/](.*js|.*skin.css)|[\\/]plugins[\\/]/, name: 'tinymce' }, }, } }, output: { filename: '[name].js', path: path.resolve(__dirname, 'public'), clean: true, }, };将 TinyMCE 资源和配置添加到项目中,并提供用于初始化编辑器的目标元素。
示例
src/index.jsconst editor = require('./editor.js'); /* 创建一个 id="editor" 的 textarea 以用于 TinyMCE 的 `selector` 选项 */ const heading = () => { const element = document.createElement('h1'); element.innerText = 'TinyMCE Webpack demo'; return element }; /* 创建一个 id="editor" 的 textarea 以用于 TinyMCE 的 `selector` 选项 */ const editorArea = () => { const element = document.createElement('textarea'); element.id = 'editor'; return element }; /* 为 textarea 创建一个父元素 */ const parent = document.createElement('p'); /* 将元素添加到页面 */ parent.appendChild(editorArea()); document.body.appendChild(heading()); document.body.appendChild(parent); /* 初始化 TinyMCE */ editor.render();运行 Webpack 以测试打包,例如:
webpack --config webpack.config.js
如果 Webpack 成功运行,请检查编辑器是否在应用程序中加载。如果 Webpack 失败,请检查任何错误并回顾此步骤中的配置更改;将 TinyMCE 打包到现有项目时,可能需要调整以解决冲突或其他问题。
后续步骤
有关以下内容的信息:
将 TinyMCE 插件添加到捆绑包中,请参阅:使用模块加载打包 TinyMCE 插件。
使用 Tiny 提供的编辑器内容 CSS,包括 Enhanced Skins & Icon Packs 中包含的高级 CSS,请参阅:使用模块加载打包 TinyMCE 内容 CSS。
创建自定义编辑器内容 CSS,请参阅:内容外观选项 -
content_css。使用 Tiny 提供的 TinyMCE 皮肤,包括 Enhanced Skins & Icon Packs 中包含的增强型皮肤,请参阅:使用模块加载打包 TinyMCE 皮肤。
为 TinyMCE 创建自定义皮肤,请参阅:为 TinyMCE 创建皮肤。
使用 Tiny 提供的图标包,包括 Enhanced Skins & Icon Packs 中包含的高级图标包,请参阅:使用模块加载打包 TinyMCE 图标包。
为 TinyMCE 创建自定义图标包,请参阅:为 TinyMCE 创建图标包。
使用语言包本地化 TinyMCE 用户界面,请参阅:打包 TinyMCE 用户界面的本地化。