【问题标题】:Using NPM module in Backbone with RequireJS在 RequireJS 中使用 Backbone 中的 NPM 模块
【发布时间】:2016-09-26 07:19:38
【问题描述】:

赫萨, 我正在编写一个 webapp,它由一个 Node 后端(Express 服务器)组成,它为客户端提供一个 Backbone 应用程序。 Backbone 应用程序使用 RequireJS 来加载使用的模块。 我想使用 Ag-grid 客户端,它可以作为 NPM 模块包含在内。 https://www.ag-grid.com/javascript-grid-getting-started/index.php

如何从 Backbone 引用这个 NPM 模块?

项目结构

./node_modules ./src/package.json ./src/app (Node backend + Express server) ./src/public ./src/public/main.coffee (contains requireJs config) ./src/public/scripts (Backbone views, models, etc)

ma​​in.coffee

require.config
    baseUrl: '../scripts/'
    paths:
        jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min'
        jqueryui: '//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min'
        underscore: '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min'
        ...

我想在此处包含 ag-grid NPM 模块,但不必将最顶部的 ./node_modules 文件夹引用为 ../../../node_modules/ag-grid/dist/ag-grid没有计算级别..)。 另外,如果可能的话,我想避免第二个 package.js 和第二个 npm install

任何与此项目结构特别相关的帮助? 其次,有没有更好的方法来构建这样一个项目? (服务于 Backbone webapp 的节点后端)

谢谢

【问题讨论】:

    标签: node.js backbone.js npm requirejs bower


    【解决方案1】:

    您猜对了,使用相对路径一直到 node_modules 目录是可行的方法。

    requirejs.config({
        paths: {
            "ag-grid": "../../../node_modules/ag-grid/dist/ag-grid",
            "backbone": "../../../node_modules/backbone/backbone"
        }
    });
    
    define(["backbone", "ag-grid"], function(Backbone, agGrid) {
        // whatever
    });
    

    您还可以将npm 用于所有依赖项,并使用RequireJS optimizer (r.js) 捆绑您的应用的优化版本。

    就我个人而言,我使用npm 进行项目开发和服务器端(节点)依赖项。对于我的 Backbone 应用程序,我使用 Bower,因为它专门用于前端依赖项管理。

    我有一个 .bowerrc 文件,告诉 bower 在哪里安装依赖项:

    {
        "directory": "src/lib",
    }
    

    还有一个调用 bower install 的 Gulp 任务:

    var bower = require("bower"),
        $ = require('gulp-load-plugins')({ lazy: true }),
        gulp = require("gulp");
    
    gulp.task('bower', function() {
        return bower.commands.install()
            .on('log', function(data) {
                $.util.log('bower', $.util.colors.cyan(data.id), data.message);
            });
    });
    

    此任务在npm install 之后使用 npm 钩子自动调用:

    "scripts": {
      // ...
      "postinstall": "gulp install"
    }
    

    查看simplified-js-project,这是一个示例项目,它展示了我围绕 Backbone 和 RequireJs 项目的开发工具。

    【讨论】:

    • 感谢您调查此事,Emile :) 很高兴听到选项 1 是可行的。关于你的第二个建议,我不熟悉 Bower,所以让我们看看我是否理解正确: - 在我的 package.json 中,我将定义一个 postinstall 脚本,它执行我的构建系统的 gulp install 任务。 - 此任务需要 bower,并执行 bower Gulp 任务。这个任务的重点是获取我感兴趣的包,将它们捆绑并保存在一个地方(例如./build/public/scripts/vendor),在那里我可以通过客户端的RequireJS轻松检索它们?
    • 如果是这样,我将查看 Bower 文档,了解如何定义我感兴趣的包捆绑在一起并提供给 RequireJS。单独说明:如果我要重构整个项目并重新开始,是否有人对如何改进正在使用的结构/技术堆栈有任何指示?
    • @jj-lucas Bower 几乎是 npm 的克隆,它只根据bower.json 文件将依赖项安装到指定文件夹。 gulp 任务是可选的,您可以直接使用 bower:"postinstall": "bower install"。您可以将 bower 依赖项放在一个易于访问的目录中,靠近您的 RequireJs 项目。然后,准备好后,您可以使用 r.js 捆绑和最小化您的应用程序以及 require 中使用的所有依赖项。
    • @jj-lucas 我在答案中添加了指向simplified-js-project 的链接,这应该会有所帮助。
    • 太棒了!该 repo 作为参考将非常有用
    猜你喜欢
    • 2012-07-07
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多