我正在将代码库从100%浏览器端切换到浏览器端和服务器端的混合。
我发现的问题是,为了让我的代码使用node.js运行,我必须使用模块。为了使我的代码成为模块,它需要几乎所有代码的巨大重构。原因是在浏览器中,跨文件使用了许多函数,而不必担心任何命名空间。
但是目前,在node.js中我找不到实现同样效果的方法,而且我找到的所有解决方案都没有用。
关于我想要的一个例子,我希望能够做到这一点:
////////////
// file1.js
////////////
function someFunction(someArgs) {
/* run some stuff, calculate some stuff */
return something;
}
////////////
// file2.js
////////////
function someFunction2(someArgs) {
/* run some code */
let someValue = someFunction(someArgs);
/* run some more code */
}
////////////
// file3.js
////////////
someFunction2(myArguments);
<小时/> 我尝试过以下解决方案here,但他们没有帮助我。
“masylum”的答案并不能满足我的需要。
“Udo G”的回答,指的是使用eval在运行文件中包含其他文件会引发此错误:
console.log(isWhitelisted("test"));
^
ReferenceError: isWhitelisted is not defined
at Object.<anonymous> (/Users/< snip >/server.js:45:13)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:139:18)
at node.js:999:3
这虽然是由Udo G指出的,因为我使用的是严格模式:
请注意,这不适用于“use strict”;
“Nick Panov”的回答对我来说也不起作用,抛出与Udo G的答案相同的错误。这也可能是因为使用严格。
有没有什么方法可以实现这一点而无需重构整个代码库以坚持使用模块?
答案 0 :(得分:0)
尝试使用构建步骤来实现此目的。简单的文件连接将帮助您。例如,请查看https://github.com/contra/gulp-concat
以下是与gulp相关的文档 - https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md