【问题标题】:Creating a JS library and declare what other libraries in depends on创建一个 JS 库并声明其他库依赖于什么
【发布时间】:2015-05-27 12:28:37
【问题描述】:

所以我正在编写一个 php 包,它将放在 github&packagist 上。它生成数据并将其写入文件,并且该软件包还将附带一个 js 库,该库的工作是读取该数据文件并将其显示给用户。 现在,这个 js 库依赖于其他库,jquery 是其中之一。

声明这些依赖项的干净方式是什么?

我不介意使用 require.js,事实上我已经将它用于其他几个项目。但是这些项目是完整的“应用程序”,而不是其他人要包含在他们的项目中的库。所以在这些情况下,添加依赖项和配置 require.js 是没有关系的,只需要完成一次。但这次我希望能够用最少的代码包含这个库,最好不要长篇大论地说明如何正确加载它以及开发人员还需要加载哪些其他库。

简而言之:我想分发一个依赖于其他库的库,我或其他开发人员可以用最少的代码将其包含在另一个项目中,并且不知道该库依赖于哪些其他库。

我确定以前有人问过这个问题,但我似乎找不到任何东西。我确实找到了很多关于如何在主项目中声明依赖项的信息,而不是在库中。

【问题讨论】:

    标签: javascript requirejs dependencies


    【解决方案1】:

    你有两个选择:

    • 将您的应用程序捆绑到一个文件中(包括第三方库)
    • 只需将您的应用程序捆绑到一个文件中(不包括第三方库)

    在这两种情况下,您都需要创建一个自动构建。您可以使用 gulp 创建任务,将所有文件连接到一个文件中,例如 framework.jsframework.min.js 其他开发人员将导入的文件。

    如果你使用 require.js,你可以使用 gulp-requirejs plugin 来运行 requirejs optimizer

    var gulp = require('gulp'),
        rjs = require('gulp-requirejs');
    
    gulp.task('requirejsBuild', function() {
        rjs({
            baseUrl: 'path/to/your/base/file.js',
            out: 'FILENAME\_TO\_BE\_OUTPUTTED',
            shim: {
                // standard require.js shim options 
            },
            // ... more require.js options 
        })
            .pipe(gulp.dest('./delpoy/')); // pipe it to the output DIR 
    });
    

    如果您决定也包含第 3 方库,请使用 No conflict fucntion 以避免有人已经加载 jquery 时出现问题。

    如果您决定不包含这些库,您可以在库的全局范围内查找一些变量,如果依赖项不可用则抛出错误。

    if(typeof $ === "undefined") throw new Error("Framework requires > Jquery 1.9.0");
    

    您通常可以轻松找到库的版本,例如在 jquery 中:

    $.prototype.jquery
    

    更新

    我个人建议使用Browserify。如果你使用 requirejs,你可以使用browserify-ftw 自动将你的项目从 AMD 迁移到 CommonJS。

    Browserify 优化器将生成一个bundle.js 文件,您的用户将能够直接导入该文件,而无需下载第 3 方依赖项或配置模块加载器。

    希望对你有帮助:)

    【讨论】:

    • 谢谢! Browserify 解决方案是一个很好的解决方案,我会同意的。我想我希望有一种统一的系统,可以声明对包的依赖,只有那些尚未加载的才会被下载。有点像 php 的作曲家,但用于 javascript。但我想这样的事情真的不存在。我想将所有库的捆绑包发送给客户端确实没什么大不了的,即使它们可能已经单独加载了,但它确实感觉有点不对劲。
    • 我认为拥有一个不包含第三方库的轻量级库可能会更好,并在您的文档中让开发人员知道需要其他一些库like for example bootstrap lets developers know that jquery is required
    • 是的,这是有道理的。非常感谢。
    猜你喜欢
    • 2020-12-08
    • 2018-04-09
    • 2016-07-24
    • 2019-02-02
    • 2011-08-15
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多