如何将多个 javascript 库与 browserify 捆绑在一起?

2023-12-30

我正在尝试在浏览器中使用 Browerifiy,如果我使用独立选项,它会公开一个模块。我不想这样做。 在实际编译代码后,网站和文档似乎在我查看的所有地方都被切断了。 没有人说如何实际使用浏览器属性中的代码。

我有一个这样的艰巨任务:

browserify: {
      standalone: {
        src: [ '<%= yeoman.server %>/shared-components/**/*.js' ],
        dest: '<%= yeoman.client %>/app/js/browserifed-shared-code.js',
        /* Commented out, zero documentation on this. Can only expose one module it seems.
        options: {
          browserifyOptions: {
            standalone: 'Utility' //Unable to say '**/*' error :-/
          }
        }
        */
      },

这似乎有效,它生成一个如下文件:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';

var UrlController = function(){};

UrlController.test = function () {
    return 'test';
};

module.exports = UrlController;

},{}],2:[function(require,module,exports){
'use strict';

var Utility = function(){};

Utility.isASCII = function (str) {
    return /^[\x00-\xFF]*$/.test(str);
};

Utility.isAlphaNumeric = function(str) {
    var code, i, len;
    for (i = 0, len = str.length; i < len; i++) {
        code = str.charCodeAt(i);
        if (!(code > 47 && code < 58) && // numeric (0-9)
        !(code > 64 && code < 91) && // upper alpha (A-Z)
        !(code > 96 && code < 123)) { // lower alpha (a-z)
            return false;
        }
    }
    return true;
};

module.exports = Utility;

},{}]},{},[1,2]);

我使用注入器自动包含它,其工作原理类似于:

<script src="app/js/browserifed-shared-code.js"></script>

现在我希望我能够打电话

require('Utility');

但我得到

Uncaught ReferenceError: require is not defined(…)

我不知道/无法在浏览器中加载这些模块。 :'-/


这里你有两个选择。要么你

解决方案1

为您想要在浏览器中访问的每个库创建一个独立的 browserify 模块。这已经在您的另一篇文章中得到了回答。基本上你会做多个 browserify 包。

.

browserify library1.js --standalone Library1 -o library1-bundle.js
browserify library2.js --standalone Library2 -o library2-bundle.js
browserify library3.js --standalone Library3 -o library3-bundle.js

 <script src="library1-bundle.js" type="text/javascript"/> 
 <script src="library2-bundle.js" type="text/javascript"/> 
 <script src="library3-bundle.js" type="text/javascript"/> 

所以,在你的构建工具中你会有

browserify: {
      library1 : {
        src: [ '<%= yeoman.server %>/shared-components/library1.js' ],
        dest: '<%= yeoman.client %>/app/js/library1-bundled.js',
        bundleOptions : { standalone : 'Library1' }
      },
      library2 : {
        src: [ '<%= yeoman.server %>/shared-components/library2.js' ],
        dest: '<%= yeoman.client %>/app/js/library2-bundled.js',
        bundleOptions : { standalone : 'Library2' }
      },
      library3 : {
        src: [ '<%= yeoman.server %>/shared-components/library3.js' ],
        dest: '<%= yeoman.client %>/app/js/library3-bundled.js',
        bundleOptions : { standalone : 'Library3' }
      }
}

解决方案2

或者,为所有模块创建一个主入口点。

// ---- main.js -----
module.exports.Library1 = require('./lib1');
module.exports.Library2 = require('./lib2');
module.exports.Library3 = require('./lib3');

然后,您使用 browserify

browserify main.js --standalone Library -o bundle.js

然后在你的浏览器中

<script src="bundle.js" type="text/javascript"/> 

在你的繁重任务中:

browserify: {
      standalone: {
        src: [ '<%= yeoman.server %>/shared-components/main.js' ],
        dest: '<%= yeoman.client %>/app/js/main-bundled.js',
        bundleOptions : { standalone : 'Library' }
      }}

关于模块加载器和 Browserify 的注意事项

然后,为了扩展我在上一篇文章中所做的答案,browserify 根据您环境中存在的模块管理器以不同方式公开其捆绑模块。

  • 如果你在 Node 中,它是 commonJS (sync),所以你可以使用 require('');
  • 如果您使用 AMD(异步),则可以使用该 AMD 语法。
  • 如果您在浏览器中,则必须使用任一窗口。或全球。

Grunt 动态任务定义

为了自动化一点,你还可以传入一个配置:

bundledLibraries : [
    Library1 : {
        src : './../src/lib1.js',
        dest : './../src/lib1-bundled.js'
    },
    Library2 ...
]

然后你迭代将它们添加到 grunt 配置中(

查看这篇文章以动态创建它们http://www.integralist.co.uk/posts/dynamic-grunt-tasks.html http://www.integralist.co.uk/posts/dynamic-grunt-tasks.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将多个 javascript 库与 browserify 捆绑在一起? 的相关文章

随机推荐

  • 打字稿从三元条件推断字符串文字

    这是一个简化的示例 function doSomething animal bird fish let flies true const animal flies bird fish doSomething animal Typescrot
  • 使用 C++ 以编程方式监视进程状态

    我必须用 C 开发一个应用程序来监视 Linux 系统中进程的状态 还需要知道是否创建了新进程或终止了现有进程 有可用的 API 吗 如果有人能告诉我如何开始 这也会很有帮助 inotify非常适合我尝试过的所有目录 除了proc文件系统
  • “pip install ipython[notebook]”中的“[notebook]”是什么意思?

    notebook 似乎是某种修饰符 但当我安装 Jupyter 而不是 ipython 时 我突然想知道什么other我一直错过了这个修改器的变体 也许可以为我安装特定的内核或配置 不幸的是 我不知道 笔记本 是什么 pip search
  • 为什么经常使用new Parent()而不是Object.create(Parent.prototype)来初始化子级的原型?

    在中间Mozilla 文档页面 https developer mozilla org en US docs Web JavaScript Guide Details of the Object Model它切换 没有足够清晰的解释 示例
  • Spring Boot MVC 请求映射覆盖静态资源

    我希望 Spring Boot 中的其余控制器能够处理所有这样的请求 arg 除了 sitemap xml 我怎样才能做到这一点 您可以通过正则表达式在控制器级别指定请求映射 并使用以下命令排除某些资源 例如 excludeResource
  • 组合换算

    我刚刚开始学习信息学 现在我接到了第一个任务 我充满了疑问 有人给我一些建议吗 任务是创建一个数学公式 允许在 3 个不同的公式之间做出决定 而无需任何类型的 switch if else 或其他运算符 Sooo的目标就是 cin 一个数字
  • Django 模板过滤器查询集

    我是 django 的新手 我有一个 Django 应用程序 其中存储按 X 和 Y 分类的产品 views py class CartListView ListView template name checkout list html c
  • 响应IE浏览器窗口外的onmousemove事件

    在 Internet Explorer 7 中鼠标移动时的身体 or 文档 onmousemove事件似乎仅在鼠标位于浏览器窗口内时触发 而不是在鼠标位于浏览器窗口外时触发 然而在 Firefox 中onmousemove当我移出浏览器窗口
  • 与 equals 相比,使用 == 运算符如何带来性能提升?

    Joshua Bloch 的 Effective JAVA 中 当我阅读有关静态工厂方法的内容时 有这样的说法 静态工厂方法返回相同对象的能力 重复调用允许类保持严格的控制 任何时候都存在哪些实例 据说执行此操作的类是 实例控制 写的原因有
  • HTML 视口中的中心图像(无 JavaScript)

    我想在浏览器中显示一张图像 如果图像小于浏览器视口 则图像居中 水平和垂直 如果图像大于视口 则图像会缩小以填充 尽可能多的视口而不调整纵横比 图像 同样 图像水平和垂直居中 I 不想使用 JavaScript 最好 最语义化的 HTML
  • 如何使用 Angular 指令捕获触摸事件

    我希望能够捕获用户在触摸设备上的一组 DOM 元素上移动手指的事实 此示例在桌面浏览器上运行良好 但在移动 Safari 中查看时不会触发所有预期事件 工作 Plunkr 演示移动 Safari 上的问题 http plnkr co edi
  • Nodejs 应用程序错误:使用 pm2 部署时绑定 EADDRINUSE

    快速应用程序部署pm2 https github com Unitech pm2 数据库是mongodb 当使用命令运行应用程序时 NODE ENV production pm2 start app js i max 经常有错误 绑定EAD
  • 如何配置 AutoMapper 以全局忽略所有具有不可访问 Setter 的属性(私有或受保护)?

    如何在不使用 IgnoreAllPropertiesWithAnInaccessibleSetter 的情况下自动忽略映射包 cfg CreateMap
  • Prestashop Web 服务返回 JSON

    经过互联网上的广泛搜索后 我确信 Prestashop 不会以 JSON 格式返回数据 它只以 XML 格式返回 不幸的是 这会导致跨域访问问题 现在 我正在尝试将 XML 由 Prestashop 返回 转换为 JSON 我想编写可以从
  • GIT_COMMITTER_DATE 无法识别

    这可能是一个非常简单的问题 但我试图修改 Git 提交的日期 但每当我尝试修改 Git 环境变量时GIT COMMITTER DATE or GIT AUTHOR DATE我收到这条消息 当我打字时git var l他们也不出现 我必须自己
  • Clang 是否为 WebAssembly 的 memory.fill 和 memory.copy 提供了内在函数?

    我正在用 C 语言开发 WebAssembly 模块 并一直在尝试利用memory fill and memory copy中定义的指令WebAssembly 规范 https webassembly github io spec core
  • 如何在不同的行上显示操作栏选项卡?

    我正在使用 ActionBarTabs 在活动中实现 3 个选项卡 选项卡在操作栏下方的纵向模式下正确显示当我切换到横向模式时 选项卡与操作栏放置在同一行 如何强制选项卡以横向模式单独显示 位于操作栏下方 我的代码是 protected v
  • 更改 WSO2 DAS 上的默认管理员密码

    安装 WSO2 数据分析服务器并更改默认管理员密码后 我收到以下错误 ERROR org wso2 carbon databridge agent endpoint DataEndpointConnectionWorker Error wh
  • 如何在 jQuery UI 对话框中显示 IFRAME

    我正在升级的 Web 应用程序使用 jQuery 和 jQuery UI 我已经替换了大多数实例window open and a target blank 与 jQuery UI 对话框 例如 用于在新窗口中打开的条款和条件 现在我将 j
  • 如何将多个 javascript 库与 browserify 捆绑在一起?

    我正在尝试在浏览器中使用 Browerifiy 如果我使用独立选项 它会公开一个模块 我不想这样做 在实际编译代码后 网站和文档似乎在我查看的所有地方都被切断了 没有人说如何实际使用浏览器属性中的代码 我有一个这样的艰巨任务 browser