【问题标题】:Meteor: ReferenceError: Accounts is not defined流星:ReferenceError:未定义帐户
【发布时间】:2015-08-17 19:38:58
【问题描述】:

我刚刚完成了 Meteor 软件包的开发。现在我想通过将它添加到一个新的 Meteor 应用程序来测试它:

my_cool_package_name/package.js

Package.on_use(function(api){
    api.use("accounts-password@1.1.1");
});

将 my_cool_package_name 添加到新项目

meteor add my_cool_package_name

Changes to your project's package version selections:

    accounts-base          added, version 1.2.0
    accounts-password      added, version 1.1.1

列出已安装的包

meteor list

    meteor-platform      1.2.2  Include a standard set of Meteor packages in your app
    my_cool_package_name  1.0.0+ This is my_cool_package_name

启动流星

meteor

ReferenceError: Accounts is not defined

W20150817-15:30:49.707(-4)? (STDERR)     at manage_users_log.insert.username (app/server/fixtures.js:7:17)
W20150817-15:30:49.707(-4)? (STDERR)     at Array.forEach (native)
W20150817-15:30:49.707(-4)? (STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:105:1)
W20150817-15:30:49.708(-4)? (STDERR)     at app/server/fixtures.js:6:4
W20150817-15:30:49.708(-4)? (STDERR)     at app/server/fixtures.js:36:3
W20150817-15:30:49.708(-4)? (STDERR)     at /Users/me/Documents/meteor/my_app/.meteor/local/build/programs/server/boot.js:222:10
W20150817-15:30:49.708(-4)? (STDERR)     at Array.forEach (native)
W20150817-15:30:49.708(-4)? (STDERR)     at Function._.each._.forEach (/Users/me/.meteor/packages/meteor-tool/.1.1.4.1kp2n64++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20150817-15:30:49.708(-4)? (STDERR)     at /Users/me/Documents/meteor/my_app/.meteor/local/build/programs/server/boot.js:117:5
=> Exited with code: 8
=> Your application is crashing. Waiting for file change.

server/fixtures.js

if (Meteor.users.find().count() === 0) {
    var users = [
        {username:'admin',email:'admin@example.com',password:'adminadmin',roles:['admin'],status:'enabled',profile:{first_name:'admin',last_name:'admin'}},
        {username:'user',email:'user@example.com',password:'useruser',roles:['user'],status:'enabled',profile:{first_name:'user',last_name:'user'}}
    ];
    _.each(users, function(user){
        var user_id = Accounts.createUser({
            username: user.username,
            email: user.email,
            password: user.password,
            profile: {
                first_name: user.profile.first_name,
                last_name: user.profile.last_name,
            }
        });
        Meteor.users.update(
            {_id: user_id},
            {$set: 
                {
                    roles: user.roles,
                    status: user.status
                }
            }
        );
    });
}

if (manage_users_log.find().count() === 0) {
    manage_users_log.insert({
        username: "admin",
        category: "server_startup",
        description: "Meteor server started."
    });
}

如果有帮助,应用结构的布局如下:

client
    my_app.html
packages
    my_cool_package_name
server
    fixtures.js

【问题讨论】:

  • 错误的其余部分在这里会很有帮助。错误是来自包内的文件还是其他地方?我敢打赌是后者。
  • 这也可能有助于查看初始页面的来源,以了解文件实际加载的顺序。你能确定你的自定义包确实是在“accounts-base”之后加载的吗?
  • 谢谢。我更新了我的问题以包含有关错误消息的更多详细信息。

标签: meteor


【解决方案1】:

使用api.imply 让您的应用可以访问包依赖项的导出符号。

Package.onUse(function(api){
  api.use("accounts-password@1.1.1");
  //
  api.imply("accounts-password@1.1.1");
});

当您根据其他包添加一个包时,它们的导出符号对主应用程序不可用,您需要暗示它们才能实现这一点。

【讨论】:

    猜你喜欢
    • 2015-03-15
    • 2017-10-31
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2018-02-14
    • 2021-06-05
    • 2015-07-02
    相关资源
    最近更新 更多