NodeJS包pipe理

我想运行这个简单的代码行(使用Node.js 8.0.0):

time node -e "console.log(require('bcrypt').hashSync(process.argv[1], 8));" your-password-here 

比较bcrypt和运行Linux Alpine的RaspberryPi上的bcryptjs。

起初它给了我:

 module.js:487 throw err; ^ Error: Cannot find module 'bcrypt' at Function.Module._resolveFilename (module.js:485:15) at (...) at evalScript (bootstrap_node.js:432:27) 

所以我试着用这个命令安装bcrypt:

 npm install -g --production bcrypt 

哪些工作(后回落编译从源代码,因为没有发现我的armv7处理器的Linux依赖)。

但是当再次尝试testing命令时,我有完全相同的错误(找不到模块'bcrypt')。

这只是做了我认为是“项目本地”安装没有“-g”选项(即使我没有项目),它终于工作和bcrypt运行我的testing命令时发现。

 npm install bcrypt 

有些熟悉NodeJS的人可以解释一下这个奇怪的机制吗?

全球安装的软件包无法在任何地方自动使用。 安装一个像你这样做是一个很好的主意,在一个平台上,显然你要尽可能less地编译多长时间; 但是,您仍然需要在本地项目中链接全局安装的软件包:

 # install globally npm install -g --production bcrypt # link locally (you must run this in your project's directory) npm link bcrypt 

这将创build符号链接,它将简单地在本地项目的node_modules目录node_modules全局安装的模块可用 – 比为每个需要它的项目重新编译一次模块要快得多。

但是,请确保记得在你需要的新版本发布时,再次更新bcrypt运行npm install -g --production bcrypt 。 在你的项目中运行npm update是不够的。

npm link文档,非常值得一读。 请注意,如果在没有包名称的情况下运行此命令的行为是完全不同的。