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

Bar*_*s41 2 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'))
Run Code Online (Sandbox Code Playgroud)

看来我需要再次在本地安装browserify到这个项目?

Bre*_*ett 6

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

从npm文档:

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


Zla*_*tko 5

正如在其他的答案说,要解决这个问题的一种方法是,你可以安装browserify在本地而不是全局,如:npm install --save browserify uglifyfy。然后你可以添加一个scriptin package.json:

...
"scripts": {
  "build": "browserify app.js > bundle.js",
   ...
},
...
Run Code Online (Sandbox Code Playgroud)

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


解决此问题的另一种方法是NODE_PATHenv 变量。在您的bashrc或等效的中设置此变量,如下所示:

export NODE_PATH=$NODE_PATH:$HOME/.nvm/versions/node/v4.2.6/lib/node_modules
Run Code Online (Sandbox Code Playgroud)

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

然而,这是次优的,因为它可能导致错误和误解。但如果是针对一些快速而肮脏的脚本,它会有所帮助。