【问题标题】:Why is it necessary to install Browserify twice to bundle为什么必须安装两次Browserify才能捆绑
【发布时间】:2016-03-14 15:50:09
【问题描述】:

我创建了一个新项目

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'

这是我的代码,基本上是替换命令行

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 到这个项目?

【问题讨论】:

    标签: javascript node.js browserify


    【解决方案1】:

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

    来自npm documentation

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

    【讨论】:

      【解决方案2】:

      正如另一个答案中所说,解决此问题的一种方法是您可以在本地而不是全局安装 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 标志安装的任何东西。

      但这并不是最理想的,因为它可能会导致错误和误解。但如果它是用于一些快速而肮脏的脚本,它会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-29
        相关资源
        最近更新 更多