14

我开始评估 RequireJS 之类的 javascript 模块工具来实现 javascript 模块化。mylib-<version>.js这似乎很有用,尤其是在开发过程中,因此每当我更改依赖文件之一时,我都不需要重新编译所有 js文件。

我的应用程序与 html 和 javascript 文件一起分发,在生产中,我想使用 javascript 文件的编译版本。

所以在开发中,我的 html 文件可能看起来像

<html>
  <head>
    <script data-main="scripts/main" src="scripts/require.js"></script>
  </head>
</html>

但在生产中,我希望它看起来更像

<html>
  <head>
    <script src="mylib-1.0.js"></script>
  </head>
</html>

如果我分发已编译的文件,我不认为它应该有任何需要引用 requirejs 的生产。

有没有办法在分发应用程序之前不必手动更改我的 html 文件?

4

2 回答 2

11

RequireJs 有一个优化工具,可以帮助你缩小和连接你的模块。它有很多选项,并且可能难以使用,但是使用像GruntJs或(尤其是)使用 GruntJs 构建的Yeoman这样的构建工具会变得更容易。

在这两种情况下,您都可以使用rjs任务(优化模块),但Yeoman还是更容易一些,因为它有生成器,可以为您配置它:

// usemin handler should point to the file containing
// the usemin blocks to be parsed
'usemin-handler': {
  html: 'index.html'
},
// rjs configuration. You don't necessarily need to specify the typical
// `path` configuration, the rjs task will parse these values from your
// main module, using http://requirejs.org/docs/optimization.html#mainConfigFile
//
// name / out / mainConfig file should be used. You can let it blank if
// you're using usemin-handler to parse rjs config from markup (default
// setup)
rjs: {
  // no minification, is done by the min task
  optimize: 'none',
  baseUrl: './scripts',
  wrap: true,
  name: 'main'
},

index.html您只需使用注释行来指定哪些 js 文件应该被缩小/连接到哪个输出文件:

    <!-- build:js scripts/amd-app.js -->
    <script data-main="scripts/main" src="scripts/vendor/require.js"></script>
    <!-- endbuild -->

在上面的示例中,模块将连接到一个名为amd-app.js.

编辑:

这将通过grunt从命令行执行来完成。这将启动许多有用的任务,这将在一个文件夹中构建项目dist,但这又是高度适应性的。

生成的index.html文件(in dist)只有(如果需要)一个 javascript 文件:

<script src="scripts/15964141.amd-app.js"></script>

我的建议:使用 Yeoman 让生活更轻松(至少在处理缩小/连接时)。

于 2013-01-14T20:31:01.303 回答
1

首先,您必须使用r 编译器将您的依赖树编译成一个文件。之后,您可以像almond这样的精简 AMD 加载程序。至少您必须找到一种方法来更改索引 html 中的 url。

看看gruntjs,它可以使整个事情自动化,有一堆任务喜欢usemin来帮助你完成这个过程。

于 2013-01-14T20:34:39.263 回答