ajaxorg/ace · warning

script for emmet-core is not loaded

Error message

script for emmet-core is not loaded

What it means

config.warn('script for emmet-core is not loaded') is emitted by ext/emmet's load() when the emmetPath internal variable is not a string, meaning the emmet-core script was never loaded or the load chain was already consumed. The function then returns false and the callback never fires, so Emmet expansion will not work.

Source

Thrown at src/ext/emmet.js:457

    if (!editor)
        return;
    var enabled = exports.isSupportedMode(editor.session.$mode);
    if (e.enableEmmet === false)
        enabled = false;
    if (enabled)
        exports.load();
    exports.updateCommands(editor, enabled);
};

/**
 * Loads the Emmet core module dynamically.
 *
 * @param {Function} [cb] - Optional callback function to be executed after module loading
 * @return {boolean} Whether the Emmet core module loading was initiated successfully
 */
exports.load = function(cb) {
    if (typeof emmetPath !== "string") {
        config.warn("script for emmet-core is not loaded");
        return false;
    }
    config.loadModule(emmetPath, function() {
        emmetPath = null;
        cb && cb();
    });
    return true;
};

exports.AceEmmetEditor = AceEmmetEditor;
config.defineOptions(Editor.prototype, "editor", {
    enableEmmet: {
        set: function(val) {
            this[val ? "on" : "removeListener"]("changeMode", onChangeMode);
            onChangeMode({enableEmmet: !!val}, this);
        },
        value: true
    }

View on GitHub (pinned to 2c1eddc392)

Solutions

  1. Load emmet-core before calling load — include emmet-core.js from the emmet distribution before ext/emmet
  2. Only call emmet.load() once; subsequent calls return false because emmetPath is nulled after the first load
  3. Use config.loadModule('ace/ext/emmet', ...) so the extension loads with its dependencies in the correct order
  4. Check the return value of load(); false means emmet-core wasn't wired up — re-check script order

Example fix

// before
ace.require('ace/ext/emmet').load(function() {...}); // emmet-core never loaded
// after
// include emmet-core.js first, then:
ace.require('ace/ext/emmet').load(function() { editor.setOption('emmet', true); });
Defensive patterns

Strategy: fallback

Validate before calling

var emmet = ace.require('ace/ext/emmet');
if (emmet.load() === false) {
  console.warn('emmet-core missing; emmet disabled');
} else {
  editor.setOption('emmet', true);
}

Type guard

function emmetAvailable(emmetExt) { return emmetExt && emmetExt.load() !== false; }

Try / catch

try {
  var ok = ace.require('ace/ext/emmet').load(function() { editor.setOption('emmet', true); });
  if (!ok) console.warn('emmet-core script not loaded; skipping emmet setup');
} catch (e) {
  console.warn('emmet unavailable', e);
}

Prevention

When it happens

Trigger: Calling exports.load(cb) (e.g., via ace.require('ace/ext/emmet').load(cb)) without first loading the emmet-core script, or calling load() a second time after emmetPath was reset to null by a previous load.

Common situations: Enabling the emmet extension without adding emmet-core.js to the page; double-invoking load(); bundler setups where the emmet-core dependency isn't wired into the emmet extension.

Related errors


AI-assisted analysis of ajaxorg/ace@2c1eddc392 (2026-08-30). Data as JSON: /api/errors/a644aefb5a97e131. Report an issue: GitHub.