You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Webpack或Rollup项目中正确定义外部全局变量?

处理CMS全局变量的Rollup/Webpack配置方案

Rollup 配置方法

方法1:结合 external 和 globals 字段(推荐)

Rollup的globals字段需要配合external一起使用,用来告知Rollup这些变量属于外部全局依赖,无需打包进最终产物,运行时直接从全局环境读取。

在rollup.config.js中添加如下配置:

export default {
  input: 'src/index.js',
  output: {
    file: 'dist/bundle.js',
    format: 'iife', // 可根据需求选择umd、es等格式
    globals: {
      dle_root: 'window.dle_root',
      dle_admin: 'window.dle_admin',
      dle_login_hash: 'window.dle_login_hash',
      dle_group: 'window.dle_group',
      dle_skin: 'window.dle_skin',
      dle_wysiwyg: 'window.dle_wysiwyg',
      quick_wysiwyg: 'window.quick_wysiwyg',
      dle_min_search: 'window.dle_min_search'
    }
  },
  external: [
    'dle_root',
    'dle_admin',
    'dle_login_hash',
    'dle_group',
    'dle_skin',
    'dle_wysiwyg',
    'quick_wysiwyg',
    'dle_min_search'
  ]
};

模块代码中可直接导入使用:

import { dle_root, dle_skin } from 'dle_root';

console.log(`当前皮肤:${dle_skin}`);

方法2:使用 @rollup/plugin-inject 自动注入

如果不想手动导入变量,可通过该插件将全局变量直接注入模块作用域:

  1. 安装插件:
npm install @rollup/plugin-inject --save-dev
  1. 配置插件:
import inject from '@rollup/plugin-inject';

export default {
  input: 'src/index.js',
  output: {
    file: 'dist/bundle.js',
    format: 'iife'
  },
  plugins: [
    inject({
      dle_root: ['window', 'dle_root'],
      dle_admin: ['window', 'dle_admin'],
      // 其余变量按相同格式配置
    })
  ]
};

模块代码中无需导入,直接使用变量名:

console.log(`站点根路径:${dle_root}`);

Webpack 配置方法

方法1:使用 externals 配置

Webpack的externals字段用于指定外部依赖,运行时从全局环境获取对应变量:

在webpack.config.js中添加:

module.exports = {
  // 其他基础配置...
  externals: {
    dle_root: 'window.dle_root',
    dle_admin: 'window.dle_admin',
    dle_login_hash: 'window.dle_login_hash',
    dle_group: 'window.dle_group',
    dle_skin: 'window.dle_skin',
    dle_wysiwyg: 'window.dle_wysiwyg',
    quick_wysiwyg: 'window.quick_wysiwyg',
    dle_min_search: 'window.dle_min_search'
  }
};

模块代码中通过导入使用:

import dleRoot from 'dle_root';

console.log(dleRoot);

方法2:使用 ProvidePlugin 自动注入

若希望无需导入直接使用变量,可借助Webpack内置的ProvidePlugin:

const webpack = require('webpack');

module.exports = {
  // 其他基础配置...
  plugins: [
    new webpack.ProvidePlugin({
      dle_root: ['window', 'dle_root'],
      dle_admin: ['window', 'dle_admin'],
      // 其余变量按相同格式配置
    })
  ]
};

模块代码中直接使用变量名:

console.log(`用户组ID:${dle_group}`);

额外注意事项

  • 确保你的模块脚本在CMS的全局变量脚本之后加载,避免出现变量未定义的错误。
  • 若使用TypeScript,需为这些全局变量添加类型声明以避免类型报错:
declare var dle_root: string;
declare var dle_admin: string;
// 其余变量的类型声明按需添加

内容的提问来源于stack exchange,提问作者Aimon Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:40