以下步骤将帮助您使用 Browserify 和 CommonJS 语法打包 .zip 版本的 TinyMCE。该过程假设用户具有使用 Browserify 和 CommonJS 语法的经验。以下步骤提供了一个使用 Browserify打包基本 TinyMCE 配置的可行示例。
要求
本指南需要以下内容:
Node.js 和 npm
使用 Browserify的基础知识
步骤
下载并解压最新版本的 TinyMCE:
对于拥有 TinyMCE 高级版自托管权限的客户,请从 Tiny Account: Downloads下载
.zip文件。对于其他所有用户,请从 TinyMCE Self-hosted releases下载 TinyMCE Dev Package。
将以下开发依赖项添加到项目中。
例如:
npm install --save-dev \ promise-polyfill \ browserify \ browserify-css \ brfs
创建一个新的源文件,用于从 TinyMCE 导入所需的组件并配置编辑器。
示例
src/editor.jsconst fs = require('fs'); /* 导入 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'); /* 导入高级插件 */ /* 从 NPM 包(推荐) */ require('tinymce-premium/plugins/advcode'); require('tinymce-premium/plugins/licensekeymanager'); /* 从 ZIP 下载 - 单独下载并添加到 /src/plugins */ /* require('./plugins/<plugincode>'); */ /* 需要内容 UI CSS(使用默认的 oxide 皮肤) */ const contentUiSkinCss = fs.readFileSync('tinymce/js/tinymce/skins/ui/oxide/content.css', { encoding: 'UTF-8' }); /* 默认的内容 CSS 可以更改或替换为适合编辑器内容的 CSS。 */ const contentCss = fs.readFileSync('tinymce/js/tinymce/skins/content/default/content.css', { encoding: 'UTF-8' }); /* 初始化 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 以懒加载高级插件 * 移除要懒加载的任何高级插件的 import 或 require 语句, * 然后取消注释并配置下面的 external_plugins: */ // external_plugins: { // 'advcode': '/plugins/advcode/plugin.min.js', // 'tinycomments': '/plugins/tinycomments/plugin.min.js' // }, }); };gpl许可证密钥用于在 GNU 通用公共许可证(GPL)下自托管 TinyMCE。要使用商业许可证或包含高级插件,请将gpl替换为有效的许可证密钥。有关详细信息,请参阅 设置许可证。将 TinyMCE 资源和配置添加到项目中,并提供一个目标元素以初始化编辑器。
示例
src/main.jsconst editor = require('./editor.js'); /* 创建具有 id="editor" 的 textarea 以用于 TinyMCE 的 `selector` 选项 */ const editorArea = () => { var element = document.createElement('textarea'); element.id = 'editor'; return element }; /* 为 textarea 创建父元素 */ const parent = document.createElement('p'); /* 将元素添加到页面 */ parent.appendChild(editorArea()); document.body.appendChild(parent); /* 初始化 TinyMCE */ editor.render();示例
demo.html<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>TinyMCE Browserify 演示</title> </head> <body> <h1>TinyMCE Browserify 演示</h1> <script src="main.bundle.js"></script> </body> </html>运行 Browserify 来测试 bundle,例如:
browserify -t brfs -g browserify-css src/main.js -o dist/main.bundle.js
如果 Browserify 成功运行,请检查编辑器是否在应用程序中加载。如果 Browserify 运行失败,请检查所有错误并查看本过程中的配置更改;当将 TinyMCE 打包到现有项目中时,可能需要调整以解决冲突或其他问题。
后续步骤
有关以下方面的信息:
向 bundle 中添加 TinyMCE 插件,请参阅:使用模块加载打包 TinyMCE 插件。
使用 Tiny 提供的编辑器内容 CSS(包括 Enhanced Skins & Icon Packs 中包含的高级 CSS),请参阅:使用模块加载打包 TinyMCE 内容 CSS。
创建自定义编辑器内容 CSS,请参阅:内容外观选项 -
content_css。使用 Tiny 提供的 TinyMCE skins(包括 Enhanced Skins & Icon Packs 中包含的增强皮肤),请参阅:使用模块加载打包 TinyMCE skins。
为 TinyMCE 创建自定义皮肤,请参阅:为 TinyMCE 创建皮肤。
使用 Tiny 提供的 icon packs(包括 Enhanced Skins & Icon Packs 中包含的高级图标包),请参阅:使用模块加载打包 TinyMCE icon packs。
为 TinyMCE 创建自定义 icon pack,请参阅:为 TinyMCE 创建 icon pack。
使用语言包本地化 TinyMCE 用户界面,请参阅:打包 TinyMCE 用户界面的本地化。