function PluginSpec (raw, scope, id, version) {
    /** @member {String|null} The npm scope of the plugin spec or null if it does not have one */
    this.scope = scope || null;

    /** @member {String|null} The id of the plugin or the raw plugin spec if it is not an npm package */
    this.id = id || raw;

    /** @member {String|null} The specified version of the plugin or null if no version was specified */
    this.version = version || null;

    /** @member {String|null} The npm package of the plugin (with scope) or null if this is not a spec for an npm package */
    this.package = (scope ? scope + id : id) || null;
}