在Node中从外部.js文件调用构造函数

3

我有一个HTML文件,它加载了几个JS文件:

<script type="text/javascript" src="jop.js"></script>
<script type="text/javascript" src="script.js"></script>

我的目标是将这两个脚本迁移到node.js上,以便可以在没有浏览器的情况下运行它们。
关于js文件:
-jop.js:使用emscripten工具编译,包含一个构造函数。
-script.js:是程序本身。
jop.js文件内容(开始几行):
var PROPModule = function(Module) {
  Module = Module || {};

var Module;if(!Module)Module=(typeof PROPModule!=="undefined"?PROPModule:null)||{};var moduleOverrides={};// file continues....
var PROP = {};                          // PROP global object 
PROP['preRun'] = prerun;                // Will be called before PROP runs, but after the Emscripten runtime has initialized
PROP['onRuntimeInitialized'] = main;    // Called when the Emscripten runtime has initialized
PROP['TOTAL_MEMORY'] = 64*1024*1024;    // PROP Heap defaults 
PROPModule(PROP);                       // Calling the constructor function with our object

我希望您能够翻译以下内容:我一直在尝试使用'require'调用script.js中的构造函数"PROPModule(PROP);",但是所有的方法都无法实现。例如下面这种方式:
script.js(在node中进行修改。开头几行):
var jopjs = require('./jop.js');
var PROP = {};
PROP['preRun'] = prerun;  
PROP['onRuntimeInitialized'] = main;
PROP['TOTAL_MEMORY'] = 64*1024*1024;
jopjs.PROPModule(PROP);    

ReferenceError: jopjs is not defined

我对js和node还很陌生,已经搜索了几天也没有找到解决方案。

请问有什么建议或者调用这个构造函数的想法吗?


你是否在jop.js文件中导出PROPModule函数? - Khlbrg
我已经解决了,但最初它并不是这样的:module.exports = PROPModule; 我刚刚尝试了另一种导出函数的方法 module.exports.PROPModule = PROPModule; 现在它可以正常工作了。 - Javi_RMZ
1个回答

0

在浏览器和nodejs中,.js文件的读取方式不同。

因此,很可能你的针对浏览器编写的.js文件无法在nodejs环境中读取,反之亦然。

为了使我的js文件兼容两者,我使用以下脚本包装我的js代码:

/** jop.js */
; (function (window, factory) {
    if (typeof exports === 'object') {
        module.exports = factory();     // NodeJs Environment
    } else {
        window.jop = factory();         // Browser Environment
    }
}(this, function () {
    return (function (window) {
        "use string";

        let PROPModule = function (Module) {
            console.log('PROPModule is called');
        }

        // exposed functions
        return { myFunc };
    }(this));

}));

以下是在NodeJS环境中导入它的方法:

script.js

const jopjs = require('./jop')

以下是如何在浏览器环境中导入它的方法(可以放在<head>或<body>标签内):

<script type="text/javascript" src="./app/lokidb-seed.js"></script>
<script>
  console.log('The "jop" word in window.jop = factory();: ', jop.PROPModule());
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接