如何导出我的浏览器化模块以在浏览器中请求?
How do I export my browserified modules for requiring in the browser?
我在 gulp:
中有几个与 browserify 捆绑在一起的 js 模块
gulp.task('build:js', ['clean:js'], function () {
browserify({
debug: true,
entries: paths.js.src
})
.transform('babelify', { presets: ['es2015'] })
.bundle()
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(gulp.dest(paths.js.dist));
});
输出一个bundle.js
。但是,当像这样捆绑时,我不能 require
浏览器中的单个模块。我想这样做,因为我不想总是启动每个模块(有些是特定于页面的)。相反,我希望能够在捆绑包旁边的页面上使用 var someModule = require('some-module');
。
现在我在文档中找不到任何关于此的内容,因为它只记录了命令行选项(而不是 js api)。 This answer 表明可以从 gulp 中要求和公开一个模块,但这会公开我的整个包,而不是组成它的模块。
一个解决方案是分别捆绑我的所有模块,排除依赖项(这样它们就不会在捆绑包中重复),然后将其连接起来。但这似乎并不是一个可行的解决方案,因为:
- 模块可能无法解析依赖关系,因为所有内容都是单独捆绑的,因此必须在浏览器中解析依赖关系。我认为不理想且容易破损。
- 这非常耗费人力,因为我使用了很多模块,每个模块都必须在 gulp 中手动导出,在我的模板中排除和引用依赖项。 There are ways to automate it,但这并不排除共享依赖项。
那我该如何解决呢?我如何在浏览器中要求我的 js 单独组成的包供客户端使用?
所以我最后做的是另一件事。我的要求有点违背 browserify 的工作方式,即使它是可能的。也许最终当 HTTP2 导入并且 js modules 可以在所有主要浏览器中使用时,这会更容易。
现在,我只有一个 global
脚本包 运行 在每个页面上,包括我所有的第三方库。然后对于每个页面,我都有一个单独的入口点,其中包含它需要的本地模块。这是迄今为止最可维护的解决方案。
我在 gulp:
中有几个与 browserify 捆绑在一起的 js 模块gulp.task('build:js', ['clean:js'], function () {
browserify({
debug: true,
entries: paths.js.src
})
.transform('babelify', { presets: ['es2015'] })
.bundle()
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(gulp.dest(paths.js.dist));
});
输出一个bundle.js
。但是,当像这样捆绑时,我不能 require
浏览器中的单个模块。我想这样做,因为我不想总是启动每个模块(有些是特定于页面的)。相反,我希望能够在捆绑包旁边的页面上使用 var someModule = require('some-module');
。
现在我在文档中找不到任何关于此的内容,因为它只记录了命令行选项(而不是 js api)。 This answer 表明可以从 gulp 中要求和公开一个模块,但这会公开我的整个包,而不是组成它的模块。
一个解决方案是分别捆绑我的所有模块,排除依赖项(这样它们就不会在捆绑包中重复),然后将其连接起来。但这似乎并不是一个可行的解决方案,因为:
- 模块可能无法解析依赖关系,因为所有内容都是单独捆绑的,因此必须在浏览器中解析依赖关系。我认为不理想且容易破损。
- 这非常耗费人力,因为我使用了很多模块,每个模块都必须在 gulp 中手动导出,在我的模板中排除和引用依赖项。 There are ways to automate it,但这并不排除共享依赖项。
那我该如何解决呢?我如何在浏览器中要求我的 js 单独组成的包供客户端使用?
所以我最后做的是另一件事。我的要求有点违背 browserify 的工作方式,即使它是可能的。也许最终当 HTTP2 导入并且 js modules 可以在所有主要浏览器中使用时,这会更容易。
现在,我只有一个 global
脚本包 运行 在每个页面上,包括我所有的第三方库。然后对于每个页面,我都有一个单独的入口点,其中包含它需要的本地模块。这是迄今为止最可维护的解决方案。