我正在玩io.js并且这样做发现我自己在Node和io.js之间切换了很多。
事实上;当我安装一个特别需要io.js的软件包时,我错过了某种警告或错误。这是一个简单的package.json,作为一个例子:
{
"name": "myApp",
"version": "1.0.0",
"description": "Simple demo site",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.1.0"
},
"engineStrict" : "true",
"engines" :{
"iojs" : "1.6.3"
}
}
app.js很简单,但只是为了完成:
var app = module.exports = require('express')();
app.get('/user', function(req, res){
res.send(200, { name: 'tobi' });
});
app.listen(3000);
console.log("Application is listening on http://localhost:3000/user")
如果我在我的终端nvm use node
中使用节点0.12.0然后清理node_modules
(rm -rf node_modules
),我仍然可以npm install
这些包。没问题,没有警告,没有错误。它可能无法运行,但会安装所有依赖项。
但是,我在文档中发现,如果我升级一个目录cd ..
,然后再次删除node_modules
(rm -rf node_modules
)并运行
npm install myApp
(其中myApp是我的package.json所在的文件夹)。我收到了警告。如果我设置了"engineStrict": "true"
,则会出错。
现在,终于到了我的问题;如果我切换到io.js(nvm use iojs
),然后运行:
npm install myApp
没有警告或错误。太棒了 - 安装得很好。但是...... node_modules
- 文件夹中没有myApp
。
来自npm install
的第一行反馈意见如下:
demoapp@1.0.0 ../../../../../../../node_modules/myApp
../../../../../../../
是我的用户的根(~
)。 myApp就在那里并且有效。但为什么?
还有:是否有另一种方法来获取安装错误而不是1)升级一个目录,2)npm install [目录名] 3)在root中查看已安装的内容?
感谢您对此提供任何帮助。
[UPDATE] 在荷马的话中
卫生署!
我刚发现another question and answer about this。留在这里作为参考,并作为我自己缺乏RTM的证明。
您可以使用--prefix-flag到要安装程序包的目录。从上面的例子中,完整的命令将是:
npm install --prefix ./myApp/ myApp
但......那不会给我警告......现在我真的必须在收到警告和决定安装包的位置之间做出选择吗?