2012-03-19 54 views
10

我目前正在研究一个大的JavaScript项目,并且正在使用RequireJS来强加一些结构。使用RequireJS的优化器和单个构建文件生成多个输出

我想使用优化器(r.js)配置构建,因此我的项目将被捆绑到一个缩小文件中(用于生产目的)。这很简单,但是我在我的项目中有几个包,并且希望将每个包构建到它自己的缩小的JavaScript文件中。的文件夹结构的

实施例:

src/core/main.js 
src/core/util/HashMap.js (
src/package1/main.js 
src/package1/views/view1.js 

main.js文件是用于模块的入口点。

我想以这样的方式构建完成后,我将有以下两个输出配置我的身材:

core.min.js 
package1.min.js 

不过,我似乎无法得到这个工作。使用构建配置的modules属性似乎不能缩小每个模块。

任何人都可以阐明我在这里做错了吗?

+0

您可以为每个模块构建一个构建模型,每个模块的构建配置文件使用'empty:'方案来消除特定模块输出中的非模块代码? http://requirejs.org/docs/optimization。html#empty – 2012-03-19 09:31:20

+0

这将是一种可能性,但是我更喜欢有一个配置文件,要求我只运行build命令一次 – thomaux 2012-03-19 09:35:35

+1

您可以为每个模块使用'exclude'吗? https://github.com/jrburke/r.js/blob/c319938abb55f493d0a46566114364c4935321de/build/example.build.js#L240 – 2012-03-19 09:39:27

回答

0

我不记得在我问这个时候究竟发生了什么错误(甚至可能是当时我正在使用的当前RequireJS版本的一个错误),但是这种设置很容易通过使用(正如我在我的问题中所述)modules部分。简单地声明你的模块如下:

optimize:"uglify", 
dir: 'out', 
modules: [ 
    { 
     name: "src/core/Main" 
    }, 
    { 
     name: "src/package1/Main" 
    } 
], 
... 

这将导致以下结构out下:

out 
|--core 
: |--Main.js 
|--package1 
: |--Main.js 

有可重命名输出文件,扁平化的输出文件夹选项,排除所有corepackage1和更多,但基本上这是我正在寻找的结构。

1

我很难让Require.JS按照我自己所需的方式完成所有的事情。

我目前使用的是Grunt。我将Require.JS plugin for Grunt配置为将十几个模块文件合并为两个文件。我确实使用modules,empty:exclude来帮助实现这一目标。 Require.JS仍然是基于它们的依赖性组合模块的最佳方式。

然后我用Uglify plugin for Grunt分别缩小输出。

虽然这可能无助于您的使用情况,但我还使用Grunt's concat plugin来帮助按照我喜欢的方式获取我的输出。

这全都在Gruntfile.js之内,所有这一切都会在grunt watch的时候自动发生,只要文件发生变化,使得开发刷新测试循环更好。

相关问题