我有一个Gruntfile来安装一些npm并创建其他功能。
问题在于:npm的下载工作正常,但在
中全局下载node_modules/User/my_user/node_modules
我想在我的项目中本地动态下载gruntfile nom而不指定路径。
这是我的grunt文件的一部分:
module.exports = function(grunt) {
grunt.initConfig({
shell: {
install: {
options: {
stdout: true,
stderr: true
},
command: [
"npm install grunt-contrib-sass",
"npm install node-sass",
"npm install grunt-contrib-less",
"npm install less",
"npm install grunt-contrib-watch",
"npm install grunt-contrib-clean",
"npm install grunt-contrib-copy",
"npm install grunt-csso",
"npm install grunt-deployments"
].join("&&")
},
install_test: {
options: {
stdout: true,
stderr: true
},
command: [
"sudo npm install -g phantomjs",
"npm install -g casperjs",
"mkdir app/Test/Frontend",
"sudo chmod -R 777 app/Test/Frontend"
].join("&&")
},
}
});
grunt.loadNpmTasks("grunt-contrib-less");
grunt.loadNpmTasks("grunt-contrib-watch");
grunt.loadNpmTasks("grunt-contrib-clean");
grunt.loadNpmTasks("grunt-contrib-copy");
grunt.loadNpmTasks("grunt-shell");
grunt.loadNpmTasks("grunt-csso");
grunt.loadNpmTasks("grunt-rsync");
grunt.registerTask("install", [
"shell:cake_tmp",
"shell:install",
"shell:install_test"
]);
};
在我这样做之后:
sudo npm install grunt
sudo npm install grunt-shell
grunt install
返回错误,它找不到模块,因为它不是本地的,而是全局的。
我该如何解决?
由于
答案 0 :(得分:2)
这是一种非常粗暴的工作方式。理想情况下,所有这些都应该进入根文件夹中的package.json
。在进行必要的更改(如果有)之后将其放入package.json
并执行npm install
它将在本地安装软件包,preinstall
hook将安装全局软件包,以便执行安装。
{
"name": "appname",
"version": "0.0.0",
"dependencies": {},
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-sass": "*",
"node-sass": "*",
"less": "*",
"grunt-concurrent": "*",
"grunt-contrib-clean": "*",
"grunt-contrib-watch": "*",
"grunt-contrib-less": "*",
"grunt-contrib-copy": "*",
"grunt-shell": "*",
"grunt-csso": "*",
"grunt-deployments": "*"
},
"engines": {
"node": ">=0.8.0"
},
"scripts": {
"test": "grunt test",
"preinstall": "sudo npm install -g phantomjs && npm install -g casperjs"
}
}
npm提供称为预安装,安装,安装后等的挂钩,使用它们进行-g
安装。
按照此LINK获取更多信息
您可以在Gruntfile.js
shell
目标