javascript - require.js - 定义自定义模块

标签 javascript requirejs

大家好,

我试图弄清楚,为什么 Cookie 模块只能在使用 new 运算符实例化后才能访问...... 我认为如果我在 shim 配置中导出 Cookie 模块并将模块名称添加到 app.js 中的必备条件中,那么它将可以全局访问。但事实并非如此。

您能否就我的模块可能出现的问题提出建议?

cookie.js

define("Cookie",function (){
    function Cookie()
    {}

    Cookie.prototype.add = function ()
    {
        doStuff();
    }

    Cookie.prototype.remove = function ()
    {
        doStuff();
    }

    return Cookie;
});

ma​​in.js

requirejs.config({
    baseUrl: 'js/lib',
    paths: {
        app: '../app',
    },
    shim:{
        Cookie: {
            exports : 'Cookie'
        }
    }
});

app.js

define(['Cookie'],function(Cookie)
{
    Cookie.add(); 
    Cookie.remove(); 
}

最佳答案

这段代码有很多问题。正如安迪指出的,方式Cookie已定义,您需要实例化它。如果您期望只有一个Cookie您的应用程序中的实例,那么是的,return new Cookie()会被指示,但如果您想创建许多实例,则 return Cookie是要做的事情,然后你使用 new Cookie在导入它的每个模块中,任何时候您需要创建 Cookie实例。

但是,您在问题中显示的代码还存在以下其他问题:

  1. 您的文件名为 cookie.js但你将其定义为 Cookie ,大小写不同。经验法则:RequireJS 区分大小写,因此文件和模块名称应该对应,除非您以某种方式在其他地方覆盖它,但您显示的代码中并非如此。

  2. 您使用define('Cookie' ,它分配名称 Cookie到你的模块。 RequireJS 的文档非常明确地建议不要手动分配模块名称。 r.js当你优化时会分配名称。或者如果你不优化,那么 RequireJS 会从文件名中分配一个模块名称。当您进行优化时,如果您已经分配了名称,r.js无法完成其工作。 (是的,有时您想自己分配名称,但如果您无法说出为什么在特定实例中您需要自己设置名称的具体原因,那么很可能你做错了。)

  3. 您使用 shim调用 RequireJS 的模块的配置 define功能。 shim选项仅适用于不调用 define 的模块。如果你给出 shim到调用 define 的模块你进入了未定义的行为领域,如果它有效,那只是运气。它可能现在可以工作,明天就会失败,或者当 RequireJS 引入一个新版本时,它可能会失败,该新版本确实使用 shim 分配一些定义的行为。对于调用 define 的模块.

关于javascript - require.js - 定义自定义模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26403551/

相关文章:

javascript - RequireJS/r.js 'baseURL' 属性看似被忽略

jquery、bootstrap 3.0 和 requirejs。无法使用bootstrap的功能

javascript - 将字符串与多种模式之一进行匹配并提取数据

jquery - RequireJS 配置被加载我的应用程序的脚本标记后面的内联 require 调用忽略

javascript - 如何设置列和容器的最大高度以便图像适合 bootstrap 4 中的整个页面?

javascript - 为什么 CodeMirror 在 Ipad 上不起作用?

javascript - requirejs 需要文字!相对路径在 iphone 上导致非规范化错误,bet 在模拟器上工作

mobile - 使用 RequireJS 和 Backbone.js 进行页面转换

javascript - 文件不被缓存

javascript - 如果特定的 HTML 标签之间包含特定字符串,则使用正则表达式