0

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?

1
  • Yes, that is entirely possible. Commented Jul 9, 2015 at 15:42

3 Answers 3

3

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>

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

Comments

1

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;
}));

Comments

0

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

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.