以下步骤将帮助您使用 CommonJS 语法 将 TinyMCE 的 .zip 版本与 Webpack 打包。本过程假定用户具备 Webpack 和 CommonJS 语法 的使用经验。以下步骤提供了一个使用 Webpack 打包基本 TinyMCE 配置的可运行示例。

要求

本指南需要以下内容:

  • Node.js 和 NPM

  • 如何使用 Webpack 的基础知识

过程

  1. 下载并解压最新版本的 TinyMCE:

  2. 将以下依赖项添加到项目中。

  3. 创建一个新的源文件,用于从 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。
  4. 更新项目的 Webpack 配置,以加载 TinyMCE CSS 并优化 TinyMCE 资源。

    示例 webpack.config.js

    const 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,
      },
    };
  5. 将 TinyMCE 资源和配置添加到项目中,并提供用于初始化编辑器的目标元素。

    示例 src/index.js

    const 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();
  6. 运行 Webpack 以测试打包,例如:

    webpack --config webpack.config.js

    如果 Webpack 成功运行,请检查编辑器是否在应用程序中加载。如果 Webpack 失败,请检查任何错误并回顾此步骤中的配置更改;将 TinyMCE 打包到现有项目时,可能需要调整以解决冲突或其他问题。

后续步骤

有关以下内容的信息: