我目前正在尝试开发一个模块,允许节点从命令行运行Grunt任务。此节点模块全局安装:
C:\Users\pcharpin\AppData\Roaming\npm\node_modules\task-app
目标是“Grunt”命令的使用对用户是透明的。为了更好地解释我的方法,请举一个使用我的节点模块的简单示例:
C:\Users\pcharpin\Desktop\demo-app> task-app copy
在本例中,我的模块将源目录复制到目标目录。
不幸的是,当我运行任务Grunt时,我的节点模块向我指出,“demo app”目录中没有文件“Gruntfile.js”。但是,该文件应该由我的节点模块在其自己的目录中找到。
我的树节点模块:
我的任务应用程序。js文件,下面是代码:
#!/Usr/bin/env node
var grunt = require('grunt');
var args = process.argv.splice(2)
checkArguments(args);
checkArguments function(args) {
[...]
runCopy();
}
runCopy = function() {
var spawn = require('child_process') spawn.
var exec = spawn('cmd', ['/ c', 'grunt copy']);
exec.stdout.on("data", function (data) {
console.log('' + data);
});
exec.stderr.on('data', function (data) {
console.log('' + data);
});
}
然后在我的“Gruntfile.js”文件中,我有代码来执行源目录到目标目录的复制:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
copy {
srcWeb {
files: [{
cwd: '<%= pkg.srcWeb%>', //root to copy
src: '**/*', // copy all files and subfolders
dest: '<%= pkg.name%>/www/', // destination folder
expand: true // When required using cwd
}]
}
}
});
我不明白为什么在“Gruntfile.js”文件中找不到节点模块。
是否需要在此项目目录中有一个文件“Gruntfile.js”?还有别的解决办法吗?
我也想知道,文件“Gruntfile.js”是否可以读取项目目录中的文件“package.json”?例如,这允许用户配置此文件以更改源路径。
编辑:
经过一些研究,我越来越接近于解决我的问题。要更改默认情况下当前目录“Gruntfile.js”的执行,可以在命令行中使用--Gruntfile选项。
如源代码grunt(grunt/lib/grunt/tasks.js)所示:
//Get any local Gruntfile or tasks that might exist. Use --gruntfile override
//if specified, otherwise search the current directory or any parent.
如何为任何Windows用户指定“Gruntfile.js”(可在全局安装的节点模块中找到)的路径?
下面是一个例子:
C:\Users\username\projects\demo应用程序
在我的源代码中,我使用--grunfile选项执行如下grunt任务:
runCopy = function() {
var spawn = require('child_process').spawn;
var pathGruntfile = 'C:\Users\username\AppData\Roaming\npm\node_module\task-app';
var exec = spawn('cmd', ['/ c', 'grunt --gruntfile' + pathGruntfile + ' Gruntfile.js']);
exec.stdout.on("data", function (data) {
console.log('' + data);
});
exec.stderr.on('data', function (data) {
console.log('' + data);
});
}
编辑2:
在等待响应之前,我找到了一个临时解决方案来获取节点模块中的“Gruntfiles.js”。但缺点是在当前目录中本地安装所有节点模块依赖项和我的节点模块。
var pathDirCurrent = process.cwd();
var pathGruntfile = pathDirCurrent.concat('\\node_modules\\task-app\\Gruntfile.js');
var spawn = require('child_process').spawn;
var exec = spawn('cmd', ['/c', 'grunt --gruntfile ' + pathGruntfile + ' create']);
exec.stdout.on("data", function(data) {
console.log('' + data);
});
最后,我理解了使用Grunt任务的逻辑。当你有一个需要使用任务的web项目应用程序时,它必须在当前目录中有Gruntfile.js。
但是,正如我在“edit2”中所说的,我们可以指定Gruntfile。js带有--grunfile选项。所以,这并不是一个缺点,因为Grunt工具与GrunFile一起工作。js位于web项目应用程序所在的当前目录中。
对于每个任务,我使用--gruntfile选项来指定Gruntfile.js的路径,作为“编辑2”中的示例。
你从哪里跑来的咕噜声?
您的项目结构和grunt文件看起来正常。可以尝试包含一个基本任务:
grunt.registerTask('default', ['copy']);
我是Grunt的新手,在设置新插件的项目时遇到了麻烦。 到目前为止我有: 全局安装grunt cli 这一切都很好,但是我想使用一个不同的uglify插件,所以,仍然在测试目录,我运行: 由于我没有使用全局标志,插件按预期下载到test/node_modules目录,位于test/node_modules/uglify js。包裹。json文件已更新为附加依赖项: 然后我编辑Gruntfile.j
问题内容: 这是我要运行的代码 这就是我得到的: module.js:340抛出错误; ^ 错误:找不到模块“ nw.gui” master/file-explorer/main.js:6:13) 我无法获得此模块。我该怎么办? 问题答案: 是NW.js(以前称为node-webkit)模块。从代码的运行时环境中运行代码时,NW.js应该提供对它的访问。 通过错误消息的外观,我认为您是直接通过No
jps输出正确: 在主机上: 在5个从节点上:
任务被卡住了,不启动代码是在一个270M的大数据集上执行带有筛选条件的交叉联接。对于大表270M和小表(100000),我已经将分区增加到16000个,我已经将其转换为广播变量 我已经为该作业添加了spark ui, 所以我必须减少分区,增加执行器,有什么想法吗 [50per completed ui 1][4][50per completed ui 2][5][1]:https://i.stac
问题内容: 有人在Grunt上使用了节点检查器进行应用程序调试吗?如果不是,您能推荐基于Grunt的应用程序的调试工具吗? 我正在为服务器端应用程序使用nodejs,并且我有Grunt来使用分离的任务(这是因为用户可以单独执行任务)。 问题答案: 要在调试中运行grunt,您需要将grunt脚本显式传递给节点: 并在任务中添加一行。然后将使用调试工具打开浏览器。 编辑2014年2月28日 添加了命
我在创作一个单调的任务时遇到了一些困难。我正在尝试执行npm install,然后是bower install,然后是grunt hub目标(为多个子项目触发构建命令)。 我遇到的问题是child_process。如果在grunt任务中运行以下命令,并且npm install spawn命令当前被注释掉,则会出现spawn ENOENT错误: 任何关于这个错误的帮助都可能会有很大的帮助;我在谷歌搜