Tenho um arquivo .js em meu projeto que importa um pacote NPM e possui 2 funções que usam esse pacote:
//replacePaths.js
import {replaceInFile} from 'replace-in-file';
async function replace() {
const options = {
files: 'src/**/*.jsx',
from: 'dev/svgs/icons-main.svg',
to: 'staging/media/svgs/icons-main.svg',
};
try {
const results = await replaceInFile(options);
} catch (error) {
console.error('Error occurred:', error);
}
}
async function revert() {
const options = {
files: 'src/**/*.jsx',
from: 'staging/media/svgs/icons-main.svg',
to: 'dev/svgs/icons-main.svg',
};
try {
const results = await replaceInFile(options);
} catch (error) {
console.error('Error occurred:', error);
}
}
module.exports = {
replace,
revert
};
Quero poder executar essas funções na linha de comando. Pesquisei no Google e, para fazer isso, basta adicionar o seguinte ao meu package.json
arquivo:
"scripts": {
...
"replace": "node replacePaths.js replace",
"revert" : "node replacePaths.js revert",
...
}
Eu sou o primeiro deles na linha de comando como tal: npm run replace
, mas recebi o erro ReferenceError: module is not defined in ES module scope
.
Pesquisando isso no Google, mudei a exports
parte para:
export default replace;
export default revert;
e tentei novamente. Não recebi nenhum erro, apenas node replacePaths.js replace
imprimi a linha no console.
Posso executar as funções removendo a parte de exportação e apenas colocando replace()
ou revert()
no arquivo JS, mas isso não é útil para mim se eu quiser ter 2 funções no mesmo arquivo.
Alguém seria capaz de me indicar a direção certa?
aqui está a resposta mais simples - para executar a função nomeada na linha de comando
Para executar um comando diferente dependendo de um argumento de linha de comando, seu código de nível superior pode ser estruturado da seguinte forma:
Exemplos de execução: