我实际上有一个加载几个js文件的html文件:
<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....
script.js文件内容(原始开始行):
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(在节点中修改。缩写行):
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的新手,我一直在寻找解决方案几天没有成功。
有任何建议或想法如何调用此构造函数?。
答案 0 :(得分:0)
.js 文件在浏览器和 nodejs 中的读取方式不同。 因此,很可能您的 .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')
虽然这是在浏览器环境中导入它的方式(在内部或 ):
<script type="text/javascript" src="./app/lokidb-seed.js"></script>
<script>
console.log('The "jop" word in window.jop = factory();: ', jop.PROPModule());
</script>