When developing a vscode Extension is it possible to have separate bash scripts inside the code of the Extension which can be executed in the vscode instance where the extension is installed?
Imagine i have .sh scripts beside my extension.ts. When Running the extension i want to be able to open a Terminal per script and execute the scripts.
I can‘t find a way to achieve this
Edit:
My folder structure in the extension repo looks like:
scripts/*.sh (multiple scripts)
extension.ts
The code I tried:
let startRuntime = vscode.commands.registerCommand('test.startRuntime', () => {
const scriptsPath = path.join(__filename, '..', 'scripts');
const scriptsDir = fs.readdirSync(scriptsPath);
scriptsDir.forEach((script) => {
const terminal = vscode.window.createTerminal(`${script}`);
terminal.show();
terminal.sendText(`./${script}`);
});
});
After running the extension a new VSCode instance starts and I want to execute the command. It actually starts as many terminals as i have scripts but in that instance on the terminals i get:
zsh: no such file or directory: ./test.sh
How do e.g other users who use the extension get access to those scripts.
Thank you in advance!
Related
I am trying to develop a VSCode Extension that requires user passward to run a command on the terminal. I have tried this but it throws an irrelevant error.
const readline = require('readline');
const reader = readline.createInterface({
input: process.stdin,
output: process.stdout
});
reader.question("Enter: ", passward=>{
reader.close();
});
Clearly, I am placing it wrong or something else because it runs fine in an individual node js file. I am placing it inside of registercommand
If by run a command in the Terminal you mean that some command should be displayed/added in VS Code terminal, then you should look at the Terminal API in VS Code.
There is a sample in https://github.com/microsoft/vscode-extension-samples/tree/main/terminal-sample, and it will probably help you better understand how to integrate with VS Code terminal.
Hope this helps
With vue.js when setting up a project using vue CLI i can run
$ npm run serve
to compile the files and start a port at localhost:8080
My question is what can i do so that the generated that got rendered in the page be also saved to a directory in my development machine.
Just like auto-saving and modifying so that i can be able to use the file on another project which depends on the generated files all during development
Are you sure it's not already creating a bundle somewhere? In some kind of build or dist folder?
Inside the webpack config you can check what value is used for output.
I don't know if an easier solution exists. But what i would suggest is :
Set writeToDisk option true. This will make sure your bundle written in to disk. Link
Then add an after-emit hook to the webpack pipeline:
const exec = require('child_process').exec; // use exec to run shell command
module.exports = {
...
plugins: [
...
{
apply: (compiler) => {
compiler.hooks.afterEmit.tap('CopyOutputPlugin', (compilation) => {
exec('command to copy output folder to desired folder');
});
}
}
]
};
child_process documentation.
I am working on a TestCafe proof of concept. I have a few tests working in one test environment. I need a way to run the same tests in up to 3 different test environments that have different URLs. Is there a best practice for this scenario?
A solution is to add custom options on the testcafe command-line like for example : --env=uat.
Use minimist to read all custom options that you have added to the TestCafe command-line and export a config object like this:
import * as minimist from 'minimist';
const args = minimist(process.argv.slice(2));
// get the options --env=xxx --user=yyy from the command line
export const config = {
env: args.env,
user: args.user,
};
Then import that config object wherever you need it in the test code.
see How do I work with configuration files and environment variables? for more details.
In v1.20.0 and later, TestCafe offers a way to specify the baseUrl in the test run setup:
CLI
Program API runner.run({baseUrl})
Config file
You can use this approach along with environment variables or custom command line arguments to determine what url should be assigned to the baseUrl option.
Alternatively, you can have a different configuration file for each test run setup and switch between these files using the --config-file option.
I currently have nightwatch.js setup using the vue automated setup. That template is located here.
https://github.com/vuejs-templates/webpack/tree/master/template/test/e2e
Is it possible to run nightwatch assertions through the command line in a REPL like fashion that is available in webdriver.io? Here is a reference to the webdriver feature https://twitter.com/webdriverio/status/806911722682544128
Update, we have moved to using Cypress.io It has made us pretty happy
You can use nightwatch-repl package available on NPM.
https://www.npmjs.com/package/nightwatch-repl
// nightwatch.conf.js
var repl = require('nightwatch-repl');
module.exports = (function (settings) {
repl.init(settings);
...
...
return settings;
})(require('./nightwatch.json'));
Once you run your tests and invoke browser.repl()
you should see the following in your console
Running: Login to dashboard
Type in a command (eg: browser.function()) or type "quit" to exit
repl>
I'm running tests with npm test - that actually runs a grunt task grunt casperjs:
casperjs:{
options:{},
files:
['./test_index.js',
'./test_map_regression.js',
'./test_index_get_gush.js'] /
},
using the grunt-casperjs-plugin in order to automate testing with slimerjs along with phantomjs, both running under casperjs in Travis-ci.
In order to do that, I need to pass the engine as a variable from the command line. something like:
casperjs --engine=slimerjs test_suite.js
Question: I can't find a way to pass the options from grunt cli (and I assume npm command line options would delegate to grunt. correctly?) to the files array.
I tried to add:
var engine = grunt.option('engine') || 'phantomjs';
engine = '--engine='+engine;
and then in the file array do:
files:['./test_index.js '+engine,
'./test_map_regression.js '+enging,
'./test_index_get_gush.js '+engine]
but seems that file array has to get real file names without the added args.
I'll be glad for any ideas on how to solve this through.
I haven't tested this, but looking at the grunt-casperjs source, it looks as though you would want to pass the engine as an option.
So, something like this should work:
casperjs:{
options: {
'engine': 'slimerjs'
},
files: [
'./test_index.js',
'./test_map_regression.js',
'./test_index_get_gush.js'
]
}