【问题标题】:Is there a way to get the extension's settings (defined in package.json) at runtime?有没有办法在运行时获取扩展的设置(在 package.json 中定义)?
【发布时间】:2018-09-06 20:32:49
【问题描述】:

在 Visual Studio Code 扩展中,有没有办法在运行时获取扩展的设置(在 package.json 中定义)?我想获取一些值(例如 displayName)。

【问题讨论】:

    标签: javascript node.js visual-studio-code vscode-extensions


    【解决方案1】:

    Visual Studio Code 扩展是用 JavaScript 编写的,与标准的 Node 脚本没有什么不同,所以一般来说,您可以使用 fs.readFile 读取扩展清单并使用 JSON.parse 读取其值。

    根据您的用例,可能会有更简单的选项。

    要求()

    要阅读您自己的扩展程序的package.json,您可以简单地使用require()

    示例:

    // lib/extension.js
    const meta = require('../package.json')
    

    进口

    import 可以实现与上述相同的操作,至少在使用 TypeScript 时是这样。

    示例

    // src/extension.ts
    import * as meta from '../package.json'
    

    确保为 JSON 文件添加类型声明

    // src/index.d.ts
    declare module '*.json' {
        const value: any;
        export default value;
    }
    

    节点依赖

    最后但同样重要的是,您可以通过编程方式读取任何扩展的package.json。使用诸如vscode-read-manifestread-pkg(或read-pkg-up)之类的 Node 包可以轻松实现。

    示例:

    const readManifest = require('vscode-read-manifest');
    
    // Async
    (async () => {
        let manifest = await readManifest('ms-python.python');
    })();
    
    // Sync
    let manifest = readManifest.sync('ms-python.python');
    

    【讨论】:

    • 感谢@idleberg。我希望有一个 API 来获取这个,但是直接读取文件会起作用。
    • 感谢@idleberg。我只使用了 fs 和 fs.readFileSync:let packageJson: string = fs.readFileSync(path.resolve(__dirname, "../package.json"), "utf8"); let projectPackage: gist.IPackage = JSON.parse(packageJson); (我正在使用来自 (gist.github.com/iainreid820/5c1cc527fe6b5b7dba41fec7fe54bf6e) 的包的 TS 描述如果我需要做任何更复杂的事情,我会考虑阅读-pkg。谢谢!
    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多