12

I'm using babeljs to write an RPG engine library. I have two files:

dice.js

import assert from 'assert';
import Random from 'random-js';

export default class Dice {
  constructor(maxNumber) {
    assert(typeof(maxNumber) === "number", "maxNumber must be a number");

    this._mt = Random.engines.mt19937();
    this.minNumber = 1;
    this.maxNumber = maxNumber;
  }

  makeThrow() {
    this._mt.autoSeed();
    return Random.integer(this.minNumber, this.maxNumber)(this._mt);
  }
}

throwManager.js

import assert from 'assert';
import Dice from 'dice';
export default class ThrowManager {
  constructor(settings) {
    assert(settings.hasOwnProperty("numberOfDices"), "must set 'numberOfDices'");
    assert(settings.hasOwnProperty("maxNumberInDice"), "must set 'maxNumberInDice'");
    assert(settings.maxNumberInDice <= 1, "must have at least 1 dice");
    this.settings = settings;
  }
  execute() {
    var throwResults = [];
    for (var d = 1; d <= this.settings.numberOfDices; d++) {
      var dice = new Dice(this.settings.maxNumberInDice);
      throwResults.push(dice.makeThrow());
    };
    return throwResults;
  }
}

When I test them with mocha, I do these imports:

tests.js

var assert = require('assert');
var Amzhen = require('../Amzhen.js');
var random = require('random-js');
//tests here...

Yet when I run the tests, I get this:


Error: Cannot find module 'dice'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/joel/Amzhen.js/Amzhen.js:47:28)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/joel/Amzhen.js/test/tests.js:2:14)

Any ideas why the dice module isn't being found?

I'm compiling the code with babel src --out-file Amzhen.js && mocha

1
  • Can you show the code in Amzhen.js that requires dice? Commented Mar 8, 2015 at 21:34

2 Answers 2

11

You should use:

import Dice from './dice';

'dice' is not the name of a published, installed Node.js module, but a local file, so you should use ./dice with an appropriate path.

See also Module not found error in node.js

Sign up to request clarification or add additional context in comments.

Comments

1

Quite old question, but this was my fix as of 2025:

npm install -D tsx

in package.json:

{
    "scripts": {
        "test-old": "mocha -r ts-node/register tests/**/*.test.ts",
        "test": "mocha -r tsx tests/**/*.test.ts",
    }
}

ts-node/register did not work, but tsx saved the day. Thanks to Jazcash

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.