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
文档,非常值得一读。 请注意,如果在没有包名称的情况下运行此命令的行为是完全不同的。