Javascript 防止browserify包含模块';s依赖关系
我想在浏览器中使用我的NodeJS模块,所以我使用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
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()
。