execute-it
v1.1.1
Published
Execute file or code and return the result
Downloads
7
Readme
execute-it
执行文件并返回结果,目前已支持 .js
、.yml
、.yaml
和 .json
格式的文件,同时还支持执行指定的源代码。
安装
$ npm install execute-it
API
getContent(filePath, ...props)
filePath
,文件的绝对路径,支持.js
、.yml
和.json
格式...props
,当filePath
为.js
文件,且该文件导出的是一个方法,则会将其透传给方法
通过 require
的方式,执行并获取文件中的内容。注意,该方法返回的是 Promise
。
const executeIt = require('execute-it');
executeIt.getContent(path.join(__dirname, '../fixtures/devops-use-function.js'), {
group: 'ivweb-init',
other: 'other'
})
.then((data) => {
console.log('result:',data)
});
evaluateJSSourceTextModule(sourceOpts, ...props)
sourceOpts
,参数,如果为字符串则为源码,等效于sourceOpts.sourceText
sourceOpts.sourceText
,js module 源码,必填sourceOpts.packageContent
,package.json 的内容,若sourceText
有依赖第三方包,则需要配置进来sourceOpts.NPM
,默认值为npm
,你也可以指定为cnpm
等,主要是搭配sourceOpts.packageContent
使用,用于安装依赖sourceOpts.doNotClear
,是否在执行完成之后不要清理临时目录,默认值为false
,即会自动清理临时文件sourceOpts.tmpDir
,默认值为本组件下的tmp
目录,例如[xxx]/node_modules/execute-it/tmp
...props
,透传给 js module 的参数
场景一:如果 js 模块不依赖第三方包,则直接传递符合 CommonJS 规范的源码
import { evaluateJSSourceTextModule} from 'execute-it';
const code = `
module.exports = function (name, opts) {
return 'hello, ' + name + '! I am ' + opts.age;
};
`;
evaluateJSSourceTextModule(code, 'execute-it', { age: 123}).then(data => {
// 输出: 'hello, execute-it! I am 123'
console.log(data);
});
场景二:如果 js 模块依赖第三方包,则需要传递依赖
import { evaluateJSSourceTextModule} from 'execute-it';
const sourceText = `
const _ = require('lodash')
module.exports = function (name, opts) {
return 'hello, ' + name + '! I am ' + JSON.stringify(_.merge({desc:'haha'},opts));
};
`;
const packageContent = `
{
"dependencies": {
"lodash": "^4.17.15"
}
}
`;
evaluateJSSourceTextModule({ sourceText, packageContent}, 'execute-it', { age: 123}).then(data => {
// 输出: 'hello, execute-it! I am {"desc":"haha","age":123}'
console.log(data);
});
场景三:支持异步
import { evaluateJSSourceTextModule} from 'execute-it';
const sourceText = `
const axios = require('axios');
module.exports = async function (url) {
const res = await axios.get(url);
return res.status;
};
`;
const packageContent = `
{
"dependencies": {
"axios": "^0.19.2"
}
}
`;
evaluateJSSourceTextModule({ sourceText, packageContent}, 'https://www.qq.com').then(data => {
// 输出: 200
console.log(data);
});