2016-03-14 29 views
1

我創建了一個新的項目爲什麼需要安裝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本項目?

回答

4

安裝像browserify這樣的npm模塊可讓您在命令行上使用browserify作爲命令。要在項目代碼中使用該模塊,必須將該模塊安裝爲依賴項。換句話說,是的,必須在項目的./node_modules文件夾中本地安裝,並在package.json文件中引用。

npm documentation

  • 本地安裝(默認):把東西放在當前包根./node_modules
  • 全局安裝(與-g):將東西放入/usr/local或安裝節點的任何地方。
  • 本地安裝,如果你要去require()它。
  • 如果要在命令行上運行它,請全局安裝它。
  • 如果您需要兩者,請在兩處安裝,或使用npm link
0

正如在其他的答案說,要解決這個問題的一種方法是,你可以安裝browserify在本地而不是全局,如:npm install --save browserify uglifyfy。然後,你可以添加一個scriptpackage.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是。然後你可以在你的代碼中使用-g標誌來安裝任何你想要的require()

但是,這不是最理想的,因爲它可能導致錯誤和誤解。但是,如果它是用於一些快速和骯髒的腳本,它可以提供幫助。