Skip to content

Simple include file #32

Open
Open

Description

Hello,

It would be really nice if there was a simple "include" function to include a js file in a page. Of course there are modules, but sometimes it is nice to be able to include another file for any reason. Currently this can be done in a roundabout way:

function include(f) {
eval.apply(global, [fs.readFileSync(f).toString()]);
}

But this has serious limitations. Using eval makes debugging very difficult. You can't tell which file the error message is coming from. Adding a simple "include" ability for a raw js script would make things much easier.

This addition would significantly increase the flexibility that io.js provides, making it an even more useful tool. My guess is that such an include is considered "bad practice" in node. But let's be honest... Javascript is by nature a flexible language - dynamically typed, contains eval, all the things that stiff programmers hate. It's the nature of the language, and keeping it out doesn't seem to be at the heart of js.

Activity

  1. feross commented on Jun 21, 2015

    @feross
    Member

    Why won't require('./file')() work for you?

  2. lemonator32 commented on Jul 28, 2016

    @lemonator32

    Modules are called in their own separate scope. Exports need to be exported in order to be used elsewhere.

    Example:

    var a = 1;
    var b = 2;
    exports.a = a;
    exports.b = b;

    In your other file:

    var o = require('./file.js');
    console.log(typeof a); // undefined
    console.log(typeof b); // undefined
    console.log(o.a); // 1
    console.log(o.b); // 2

    It's kinda similar to making a class in JavaScript, except replace this with exports.

    If you want, you can assign the variables directly to global like this:

    global.a = 1;
    global.b = 2;

    I wouldn't recommend this though because it could have conflict with other variables

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions