为什么有必要将Browserify安装两次才能捆绑

时间:2016-03-14 15:50:09

标签: javascript node.js browserify

我创建了一个新项目

npm install -g browserify

我使用cmdline browserify app.js > bundle.js进行了测试。凉。

我想缩小,所以我npm install uglifyify --save-dev

我使用cmdline 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到这个项目?

2 个答案:

答案 0 :(得分:5)

安装像browserify这样的npm模块允许您在命令行上使用browserify作为命令。要在项目代码中使用该模块,必须将模块作为依赖项安装。换句话说,是的,必须在项目的./node_modules文件夹中本地安装,并在package.json文件中引用。

来自npm documentation

  
      
  • 本地安装(默认):将内容放入当前软件包根目录的./node_modules
  •   
  • 全局安装(使用-g):将内容放入/usr/local或安装节点的任何位置。
  •   
  • 如果您要转发require(),请在本地安装。
  •   
  • 如果要在命令行上运行它,请全局安装。
  •   
  • 如果您需要两者,请在两个地方安装,或使用npm link
  •   

答案 1 :(得分:3)

正如在另一个答案中所说,解决此问题的一种方法是您可以在本地而不是全局安装browserify,例如:npm install --save browserify uglifyfy。然后,您可以在script中添加package.json

...
"scripts": {
  "build": "browserify app.js > bundle.js",
   ...
},
...

现在,npm run-script build将知道如何找到本地browserify,它将位于您的node_modules/目录中。您的require('browserify')将起作用,因为browserify现在是本地的。

另一种解决方法是NODE_PATH env变量。将此变量设置为bashrc或等效内容,如下所示:

export NODE_PATH=$NODE_PATH:$HOME/.nvm/versions/node/v4.2.6/lib/node_modules

调整全局node_modules所在位置的路径。然后,您可以require()代码中使用-g标志安装的任何内容。

然而,这不是最理想的,因为它可能导致错误和误解。但是,如果它是一些快速和脏的脚本,它可以帮助。