【问题标题】:How to manage requireJS based packages for Node.js applications如何为 Node.js 应用程序管理基于 requireJS 的包
【发布时间】:2013-01-22 18:04:52
【问题描述】:

自从遇到 RequireJS 之后,我就开始全心全意地采用它,因为它似乎是一种组织依赖关系等的好方法。

对于我当前的项目,我创建了一个由 requireJS 组织的模块的“包”,它将为许多 node.js 应用程序提供所需的数据库 API。

但是我遇到了一个绊脚石......我怎样才能允许第三方应用程序使用我的包,而不需要与 requireJS 打交道?

我的应用程序和 API 的目录结构目前如下:

api_package/node_modules
api_package/controllers/*
api_package/views/*
api_package/helpers/*
api_package/models/*
api_package/main.js

application_1/node_modules
application_1/app.js

application_2/node_modules
application_2/app.js

我需要我的应用程序是独立的 - 这样它们就可以轻松部署 - 所以我目前的工作是将 api_package/* 复制到 application_1 和 2 的“node_modules”目录中,并将它们的 requirejs 配置设置为以下:

(function() {
  var requirejs;

  requirejs = require('requirejs').config({
    baseUrl: __dirname,
    nodeRequire: require,
    packages: [
      {
        name: 'api_package',
        location: './node_modules/api_package'
      }
    ]
  });

这感觉有点肮脏和错误!

有没有更好的方法?我是否缺少 requireJS 的一些打包功能?

是否甚至可以隐藏我的 api_package 的实现细节(细节是我正在使用 requireJS)并允许应用程序像使用任何其他模块一样使用它:

require('api_package')

【问题讨论】:

    标签: javascript node.js requirejs


    【解决方案1】:

    您可以使用 amdefine 包,它允许您编写 AMD API 并让模块在节点程序中工作,而无需其他程序使用 AMD。

    除了amdefine github page 上的文档,这也是documented on the RequireJS website

    【讨论】:

    • 这是否意味着对于 api_package 中的每个代码文件,我都需要在前面加上 if (typeof define !== 'function') { var define = require('amdefine')(module); }
    • @将,是的,您希望通过 AMD/CommonJS 加载的每个代码文件。不过,r.js 优化器可以在部署构建中去除这些内容。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2014-01-17
    相关资源
    最近更新 更多