简体   繁体   中英

How to get unknown file path - the extension path - using Javascript?

I am trying to develop an extension for VSCode and I need to search for the exact file path where my extension is saved. I've tried this code:

var text;

const directoryPath = path.join(Os.homedir(), '.vscode/extensions');
fs.readdir(directoryPath, function (err, files) {
    if (err) {
        y2.appendLine('Unable to scan directory: ' + err);
    }
    for (let i=0;i<files.length;i++){
        if (files[i].startsWith("MY_EXTENSION")){
            text = files[i];
            y2.appendLine(text);
            break;
        }
    }
});
y2.appendLine(text);

y2 is only an output channel I added. The outcome of this code is:

undefined
MY_EXTENSION

If I take out the second y2.appendLine(text) I receive only MY_EXTENSION but I don't get how to make text global or how to modify the value of the global variable text inside readdir .

I also don't understand why it first executes y2.appendLine(text) and then readdir .

It is really important and I would be grateful to have your help!

I'm not sure what exactly you are trying to do there, but looking at your code it seems like you are trying to save some data for your extension in particular.

For this purpose, you probably want to use the globalStorage object instead.

You can learn more about it in the Data storage section and the ExtensionContext documentation .

For the path to your extension, use the context object and its properties:

extensionPath

The absolute file path of the directory containing the extension. Shorthand notation for ExtensionContext.extensionUri.fsPath (independent of the uri scheme).

extensionUri

The uri of the directory containing the extension.

From ExtensionContext . If it is just for the purpose of storage, see @mausworks's answer about globalStorage or storagePath , ets.

You could put it in a function like this:

function searchExt() {
    const directoryPath = path.join(Os.homedir(), '.vscode/extensions');
    fs.readdir(directoryPath, (err, files) => {
        let text = null;
        if (err) {
            y2.appendLine(`Unable to scan directory: ${err}`);
        } else {
            for (let i = 0; i < files.length; i++) {
                if (files[i].startsWith('MY_EXTENSION')) {
                    text = files[i];
                    break;
                }
            }
        }

        return text;
    });
}

const searchResult = searchExt();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM