xandout
xandout

Reputation: 173

Create node module and <script> in one file

How can I write my source file so that it can be "required" and <script src=""> from one code base?

I have hit a rare function that makes sense on both side of the app and would like to only maintain one version.

Is it possible to make a script be usable on both sides assuming it does not use any platform specific functions?

Upvotes: 0

Views: 109

Answers (3)

Kevin B
Kevin B

Reputation: 95054

Check for module to exist, and if it doesn't, use window instead.

(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        module.exports = factory();
    } else {
        window.myObj = factory();
    }
}(function (){
    // your code here, return what should be exported.
    var myObj = {foo:"Bar"};
    return myObj;
}));

Additionally, if you need to require in additional dependencies, you could change the above to this:

(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        module.exports = factory(require('somemodule'));
    } else {
        window.myObj = factory(window.somemodule);
    }
}(function (somemodule){
    // your code here, return what should be exported.
    var myObj = {foo:somemodule("Bar")};
    return myObj;
}));

Upvotes: 1

Dmitry Ivanov
Dmitry Ivanov

Reputation: 381

The script itself:

var myFunc = function(){
};

if (typeof module !== 'undefined' && typeof module.exports !== 'undefined')
  module.exports = myFunc;

Now you can either require() this module or just include it into your web-page with <script type="text/javascript" src="..."></script>

Upvotes: 3

c-smile
c-smile

Reputation: 27490

You can use requirejs on client side too and so to include that module by requirejs() from <script> on your page,

Upvotes: 0

Related Questions