【问题标题】:How do you import non-node.js files?如何导入非 node.js 文件?
【发布时间】:2011-06-07 11:09:08
【问题描述】:

如何加载不符合 node.js 格式的外部 js 文件。我正在尝试导入 json 序列化库。我该怎么做?

【问题讨论】:

  • 有对 json 的内置支持(例如 JSON.stringify(obj)),您是否正在寻找已经支持的功能集之外的东西?
  • @david 仅供现在和将来参考。我不想找到所有东西的 node.js 版本。
  • 绝对不要导入第二个 JSON 库(我假设您正在查看 json2.js?)。 JSON.parse() 和 JSON.stringify() 从一开始都内置在节点中。
  • @Will03uk “不适合 node.js 格式”是什么意思?

标签: javascript node.js


【解决方案1】:

2 个答案...

1) JSON 对象是内置在 node.js 中的,因此您只需调用 JSON.parse() 和 JSON.stringify(),对于这种特殊情况无需导入外部代码。

2) 导入外部代码,node.js 遵循 CommonJS 模块规范,可以使用 require()

因此,如果您有一个名为 external.js 的文件(与其余代码位于同一目录中):

this.hi = function(x){ console.log("hi " + x); }

从你做的节点:

var foo = require("./external");
foo.hi("there");

你会看到输出hi there

【讨论】:

    【解决方案2】:

    如果你信任代码(我的意思是,真的信任代码)那么你可以eval它:

    eval(require('fs').readFileSync('somefile.js', 'utf8')); 
    

    我不建议使用远程代码执行此操作(因为它可能会在您不知情的情况下更改),但如果您有某个内容的本地副本,那应该没问题。

    【讨论】:

    • 这是一个可怕的答案。我喜欢它。
    • 接受答案中的简单要求比读取 JSON 效果更好。如果 JSON 是一个配置文件,并且您想使用 webpack、背包等将它注入到您的 .js 文件中,这也是有益的。
    • 如果它来自您已经信任的文件,就像您在执行require()时一样信任
    【解决方案3】:

    编写包装器或更改代码。

    什么应该自动使它工作? Node 应该如何知道哪些函数应该被导出?

    您所能做的就是调整代码以匹配 Common JS 标准,但在此之前,请检查 Node.js Wiki 上的 API DocsModules Pages,看看是否有人已经完成了这项工作给你:)

    如果您自己编写应该在浏览器和 Node.js 中工作的代码,您可以使用如下包装器:

    (function(node) {
        // Your Awesome code here
        if (node) {
            exports.foo = ...
    
        } else {
            window.foo = ...
        }
    
    })((function(){return ('' + this).slice(8, -1) !== 'DOMWindow';})());
    

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 2014-12-25
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多