创建一个JS库并声明其他库所依赖的内容

时间:2015-03-24 09:01:13

标签: javascript requirejs dependencies

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

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

我不介意使用require.js,事实上我已将它用于其他几个项目。但是那些项目已经完成了" apps"而不是其他人要在他们的项目中包含的库。因此,在这些情况下,无需考虑添加依赖项和配置require.js,它只需要完成一次。但是这次我希望能够用最少量的代码包含这个库,最好没有关于如何正确加载它的长篇说明以及开发人员需要加载的其他库。

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

我确定之前已经问过,但我似乎无法找到任何内容。我确实找到了很多关于如何在主项目中声明依赖关系的信息,但在库中却没有。

1 个答案:

答案 0 :(得分: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文件,您的用户可以直接导入该文件,而无需下载第三方依赖项或配置模块加载程序。

希望有所帮助:)