将现有JavaScript项目导入Grunt/Brunch项目

将现有JavaScript项目导入Grunt/Brunch项目,javascript,node.js,brunch,gruntjs,Javascript,Node.js,Brunch,Gruntjs,我看了Paul Irish宣布Yeoman的演讲(www.Yeoman.io),我对运行连续构建环境的概念非常着迷。我不满足于等待约曼人的邀请,我尝试了咕噜和早午餐。这两者都很容易安装,而且我可以用最少的努力启动和运行新项目 我不明白如何将现有项目迁移到这两个平台中。我的项目使用一个名称空间,并对模块使用两个约定(一个用于实例化另一个用于实用程序),每个约定都封装在自动执行的匿名函数中,这些匿名函数导出到实例或名称空间 我有至少200个模块和更多简单的助手函数导出到名称空间;因此,使用控制台在g

我看了Paul Irish宣布Yeoman的演讲(www.Yeoman.io),我对运行连续构建环境的概念非常着迷。我不满足于等待约曼人的邀请,我尝试了咕噜和早午餐。这两者都很容易安装,而且我可以用最少的努力启动和运行新项目

我不明白如何将现有项目迁移到这两个平台中。我的项目使用一个名称空间,并对模块使用两个约定(一个用于实例化另一个用于实用程序),每个约定都封装在自动执行的匿名函数中,这些匿名函数导出到实例或名称空间

我有至少200个模块和更多简单的助手函数导出到名称空间;因此,使用控制台在grunt/brunch项目中创建这些模块,然后分别手动导入每个模块,这是完全没有效率的。此外,我正在使用至少15种不同的第三方JavaScript工具。我不清楚如何把这些带进来

以最少的重构和对任意第三方工具的支持,将大型现有项目迁移到Grunt/Brunch中,最有效的方法是什么

更新:在这两种食物中,我发现早午餐更容易对付。如果您使用库存“骨架”(即“模板”--从命令行{您希望发生更改的文件夹中}执行“早午餐新项目”[project_name]--骨架git://github.com/brunch/simple-js-skeleton.git)对于纯JS,您会得到一个新的文件夹结构,它实际上响应速度非常快。您放入“应用程序”(您自己的代码)或“供应商”(第三方)文件夹的任何内容都将在文件编辑时自动为您重新编译(当您运行“早午餐观察”时)

这很好,除了。根据文档,您可以控制从Brunch config.coffee文件(JSON文本文件)编译并连接到一起的订单供应商脚本。 对该文件的更改似乎没有任何效果,因此您最终会遇到来自期望其他插件的插件的第三方竞争条件

此外,当您将自己的代码放入自动创建的“app”文件夹时,您会在编辑代码版本时得到一个自动编译的实时代码;但它是不可接近的。Brunch会混淆window对象,因此我对window.myNameSpace的初始命名空间声明失败,并且所有后续对命名空间的库调用也会失败。这与Brunch的模块系统有关,我找不到相关文档

我通过将名称空间类放在“vendor”文件夹中解决了这个问题,这确保了它连接到窗口对象;然而,现在有一个竞争条件:我的命名空间并不总是适用于我的所有模块

现在的问题是:


将所有内部和外部库复制到早午餐项目后,如何配置应用程序以正常顺序加载它们?

config.coffee
不是真正的json,而是真正的js/coffeescript,但顺序编辑应该可以工作。你能用准确的配置顺序在早午餐bugtracker中打开一个问题吗


我不认为有一种快速重写应用程序的方法可以使用模块而不是全局
窗口
变量。顺便说一句,全球化被认为是一种不好的品味。但是你的解决方案可能会奏效,是的。

这有点像一部作品,但我最终找到了答案。当我开始吃早午餐时,并不清楚如何迈出第一步:导入我的目录结构。我花了几次时间浏览了文档,然后才发现:

  • 执行早午餐新MyAppName-shttps://github.com/damassi/Javascript-App-Skeleton
  • ,它将生成一个框架文件夹结构和config.coffee文件
  • 对我来说,这个结构中唯一相关的文件夹是“app”(CSS、JS和HTML的原始src内容)、“public”(编译内容的目的地和为NodeJS服务器提供服务的位置)和“vendor”(第三方文件的位置)
  • Brunch在目录结构的根目录下创建一个config.coffee文件,内容如下:
    files:
    Java脚本:
    defaultExtension:'js'
    joinTo:
    'javascripts/app.js':/^app/
    'javascripts/vendor.js':/^vendor/
    订单:
    之前:[
    'vendor/scripts/console helper.js',
    'vendor/scripts/jquery-1.7.1.min.js'
    ]
  • 这个对象的“joinTo”属性让我感到困惑,直到我意识到“javascripts”实际上只是“客户端代码”的一个掩码,“apps.js”实际上是一个调用“递归地获取文件夹“app”中的所有*.js文件”
  • 一旦这是明确的,你所需要做的就是把你的内容放到“应用程序”中。我将*.html和图像文件放入“资产”子文件夹,并将所有JavaScript内容放入lib
  • 此时,您可以运行brunch build和brunch watch,您的项目已启动并正在运行,在进行更改时实时编译,并在浏览器中实时重新加载
  • 虽然早午餐比Grunt更易于使用第6步,但对我来说,早午餐编译的本质是失败的。每个JavaScript文件都包装在一个CommonJS模块中,模块名称基于相对路径和文件名('lib/core/ajax',等等)。CommonJS的理念不适合我,重构我的库以使用CommonJS所涉及的工作是巨大的

    那么,回到格伦特。一旦我了解了如何将一个项目导入到早午餐中,导入到Grunt就很简单了。我在windows上,所以所有grunt调用都使用grunt.cmd

  • 调用
    grunt init:jquery
    (这可以是任何地方,我将创建的目录结构移动到现有的项目文件夹中)
  • 和Brunch一样,您会得到一个自动生成的目录结构和配置文件(grunt.js),但它要薄得多。Grunt的配置如下:
    concat:{
    地区:{
    src:[''],
    dest:'dist/.js'
    }
    },
    最小值:{
    地区:{
    src:['','',
    dest:'dist/.min.js'
    }
    },
    昆特:{
    档案:['t