Javascript 防止browserify包含模块';s依赖关系

Javascript 防止browserify包含模块';s依赖关系,javascript,node.js,gulp,browserify,Javascript,Node.js,Gulp,Browserify,我想在浏览器中使用我的NodeJS模块,所以我使用browserify来处理它 现在,我如何阻止browserify在bundle文件中包含模块的依赖项?在本例中,依赖项是lodash,我将在index.html中单独加载它 以下是到目前为止我得到的信息: index.html <script src="lodash.js"></script> <script src="my-module.js"></script> 大口喝 var browse

我想在浏览器中使用我的NodeJS模块,所以我使用
browserify
来处理它

现在,我如何阻止
browserify
在bundle文件中包含模块的依赖项?在本例中,依赖项是
lodash
,我将在
index.html
中单独加载它

以下是到目前为止我得到的信息:

index.html

<script src="lodash.js"></script>
<script src="my-module.js"></script>
大口喝

var browserify = require('browserify'),
  source = require('vinyl-source-stream');

gulp.task('browserify', function() {
  return browserify()
    .require('./index.js', {
      expose: 'my-module'
    })
    .bundle()
    .pipe(source('my-module.js'))
    .pipe(gulp.dest('./'));
});
gulp.task('browserify', function() {
  return browserify('./index.js')
    .require('./index.js', {
      expose: 'my-module'
    })
    .transform('browserify-shim', {
      global: true
    })
    .bundle()
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./'));
});

有一个排除文件的选项:

用法:浏览[输入文件]{OPTIONS}
[…]
--忽略,-我用空存根替换文件。文件可以是全局文件。
--exclude,-u从输出包中省略文件。文件可以是全局文件

以及相应的
exclude
功能:

b、 排除(文件)

防止模块名称或文件中的文件显示在输出捆绑包中

如果您的代码试图要求()该文件,除非您提供了另一种加载机制,否则它将抛出该文件

所以你应该试试这个:

return browserify()
  .require('./index.js', {
    expose: 'my-module'
  })
  .exclude('lodash.js')
  .bundle();

browserify shim
提供设置全局的选项

下面是我对代码所做的更改

package.json

{
  "browserify-shim": {
    "lodash": "global:_"
  },
  "browserify": {
    "transform": ["browserify-shim"]
  }
}
大口喝

var browserify = require('browserify'),
  source = require('vinyl-source-stream');

gulp.task('browserify', function() {
  return browserify()
    .require('./index.js', {
      expose: 'my-module'
    })
    .bundle()
    .pipe(source('my-module.js'))
    .pipe(gulp.dest('./'));
});
gulp.task('browserify', function() {
  return browserify('./index.js')
    .require('./index.js', {
      expose: 'my-module'
    })
    .transform('browserify-shim', {
      global: true
    })
    .bundle()
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./'));
});
我明白了

const nodeOnlyModule = eval('require')('module-name');

这样您就可以欺骗browserify。

为什么要单独加载它?browserify的主要目标是捆绑所有内容……嗯,前端应用程序(index.html)已经将lodash
\uu
作为全局应用程序。也许你应该更改前端应用程序?漏球并不是最好的做法。对不起,我不同意,我有一个角度SPA,
Angular
lodash
作为球。我看不出有什么错。@loganfsmyth捆绑所有东西使开发更容易,但为什么在部署期间要捆绑依赖项呢?大多数常见的库已经托管在Google和Cloudflare的CDN上;此外,用户的浏览器可能已经缓存了这些lib。捆绑所有内容会失去速度优势。注意:不鼓励使用
eval()