为什么需要两次安装Browserify进行捆绑
我创build了一个新的项目
我npm install -g browserify
我使用cmdline进行了testing, browserify app.js > bundle.js
。 凉。
我想缩小所以我npm install uglifyify --save-dev
我使用cmdline进行testing, browserify -g uglifyify app.js > bundle.js
。 大。
现在我想用代码做到这一点,但我得到Error: Cannot find module 'browserify'
这是我的代码,基本上取代了cmdline
var browserify = require('browserify') var fs = require('fs') var bundler = browserify('./app.js') bundler.transform({ global: true }, 'uglifyify') bundler.bundle() .pipe(fs.createWriteStream('./bundle.js'))
看来我需要再次在本地安装browserify到这个项目?
像browserify
一样安装一个npm模块允许你在命令行中使用browserify
作为命令。 要在项目代码中使用模块,必须将模块作为依赖项安装。 换句话说,是的,必须在项目的./node_modules
文件夹中本地安装,并在package.json
文件中引用。
从npm文档 :
- 本地安装(默认):将东西放在当前软件包根目录的
./node_modules
中。- 全局安装(使用
-g
):把东西放在/usr/local
或安装节点的/usr/local
。- 如果你打算
require()
它在本地安装。- 如果要在命令行上运行它,请全局安装它。
- 如果你需要两个,那么在两个地方安装它,或使用
npm link
。
正如另一个答案所说,解决这个问题的一个方法就是你可以在本地而不是全局npm install --save browserify uglifyfy
,比如: npm install --save browserify uglifyfy
。 然后你可以在package.json
添加一个script
:
... "scripts": { "build": "browserify app.js > bundle.js", ... }, ...
现在, npm run-script build
会知道如何find本地的browserify,它将在你的node_modules/
目录下。 而你的require('browserify')
将起作用,因为browserify现在是本地的。
另一种可以解决这个问题的方法是NODE_PATH
envvariables。 在你的bashrc
或等价物中设置这个variables:
export NODE_PATH=$NODE_PATH:$HOME/.nvm/versions/node/v4.2.6/lib/node_modules
调整path到您的全局node_modules。 然后你可以在你的代码中使用-g标志来require()
你安装的任何东西。
然而,这是不理想的,因为这会导致错误和误解。 但是,如果这是一些快速和肮脏的脚本,它可以帮助。