【问题标题】:Does nodejs support "require" for a json file without .json extensionnodejs 是否支持没有 .json 扩展名的 json 文件的“require”
【发布时间】:2016-02-18 10:30:17
【问题描述】:

在节点 5.0 中是否有 require 的语法,它会将文件识别为不带 .json 扩展名的 json??

例如,我希望能够使用这样的 require 语句读取 .bowerrc 文件(一个 json 文件)。

var bowerrc = require("./.bowerrc");

但是 node 抛出一个令牌错误,因为它认为它是 javascript 而不是 json 文件。

如果我暂时将 .bowerrc 更改为 .bowerrc.json(以及文件名),那么一切都很好,所以我知道这是正在发生的事情。

我看到浏览器有一个 requirejs 插件支持json!nameofile,但在 node 中不起作用。

【问题讨论】:

    标签: json node.js require


    【解决方案1】:

    不,如果 require() 没有正确的文件扩展名,则无法将其视为 JSON。

    相反,您只需要读取文件并自己解析即可。

    这是来自 node.js 文档的相关部分:

    .js 文件被解释为 JavaScript 文本文件和 .json 文件 被解析为 JSON 文本文件。 .node 文件被解释为已编译 加载了 dlopen 的插件模块。

    LOAD_AS_FILE(X)

    1. 如果 X 是文件,则将 X 作为 JavaScript 文本加载。停止
    2. 如果 X.js 是文件,则将 X.js 作为 JavaScript 文本加载。停止
    3. 如果 X.json 是文件,则将 X.json 解析为 JavaScript 对象。停止
    4. 如果 X.node 是文件,则将 X.node 作为二进制插件加载。停止

    您可以制作自己的 JSON 加载器:

    function loadJSON(file) {
        var data = fs.readFileSync(file);
        return JSON.parse(data);        
    }
    

    【讨论】:

    • 我在寻找像 require('xx.is-json', {format: 'json'}); 这样的 require 的内置选项
    • 虽然它没有使用 require 我最近遇到了一个模块,您可以在其中加载任何配置类型文件并指定文件类型而不管文件名如何。 npmjs.com/package/app-etc-load 所以像这样在一个衬里var bowerrc = require( 'app-etc-load' )("./.bowerrc",json);
    • 滚动您自己的解决方案并不完全相同。要求路径是相对于调用它的文件的。此解决方案与应用程序的工作目录相关。
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多