fire_water
fire_water

Reputation: 1449

Meteor: ReferenceError: Accounts is not defined

I just finished developing a Meteor package. Now I want to test it by adding it to a new Meteor app:

my_cool_package_name/package.js

Package.on_use(function(api){
    api.use("[email protected]");
});

Add my_cool_package_name to a new project

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

List installed packages

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

Start meteor

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:'[email protected]',password:'adminadmin',roles:['admin'],status:'enabled',profile:{first_name:'admin',last_name:'admin'}},
        {username:'user',email:'[email protected]',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."
    });
}

If it helps, the app structure is laid out like so:

client
    my_app.html
packages
    my_cool_package_name
server
    fixtures.js

Upvotes: 3

Views: 1097

Answers (1)

saimeunt
saimeunt

Reputation: 22696

Use api.imply to give your app access to the exported symbols of your package dependencies.

Package.onUse(function(api){
  api.use("[email protected]");
  //
  api.imply("[email protected]");
});

When you add a package depending on other packages, their exported symbols are not available to the main app, you need to imply them to make this happen.

Upvotes: 2

Related Questions