为什么要安装 Browserify 两次才能捆绑
Why is it necessary to install Browserify twice to bundle
我创建了一个新项目
我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?
安装像 browserify
这样的 npm 模块允许您在命令行上使用 browserify
作为命令。要在项目代码中使用该模块,您必须将该模块安装为依赖项。换句话说,是的,它必须本地安装在项目的 ./node_modules
文件夹中并在 package.json
文件中引用。
- Local install (default): puts stuff in
./node_modules
of the current package root.
- Global install (with
-g
): puts stuff in /usr/local
or wherever node is installed.
- Install it locally if you're going to
require()
it.
- Install it globally if you're going to run it on the command line.
- If you need both, then install it in both places, or use
npm link
.
如另一个答案所述,解决此问题的一种方法是您可以在本地而不是全局安装 browserify,例如:npm install --save browserify uglifyfy
。然后你可以在package.json
中添加一个script
:
...
"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 标志安装的任何东西。
然而,这是次优的,因为它可能导致错误和误解。但如果它用于一些快速而肮脏的脚本,它会有所帮助。
我创建了一个新项目
我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?
安装像 browserify
这样的 npm 模块允许您在命令行上使用 browserify
作为命令。要在项目代码中使用该模块,您必须将该模块安装为依赖项。换句话说,是的,它必须本地安装在项目的 ./node_modules
文件夹中并在 package.json
文件中引用。
- Local install (default): puts stuff in
./node_modules
of the current package root.- Global install (with
-g
): puts stuff in/usr/local
or wherever node is installed.- Install it locally if you're going to
require()
it.- Install it globally if you're going to run it on the command line.
- If you need both, then install it in both places, or use
npm link
.
如另一个答案所述,解决此问题的一种方法是您可以在本地而不是全局安装 browserify,例如:npm install --save browserify uglifyfy
。然后你可以在package.json
中添加一个script
:
...
"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 标志安装的任何东西。
然而,这是次优的,因为它可能导致错误和误解。但如果它用于一些快速而肮脏的脚本,它会有所帮助。