javascript - 由 r.js 驱动的 Node 构建脚本生成的文件似乎没有执行任何操作

标签 javascript node.js requirejs amd r.js

来源

我的 src 具有以下结构:

src
|-- index.html
|-- js
|    |-- amdconfig.js
|    |-- main.js
|    |-- ...
|-- lib
     |-- require
     |    |-- require.js
     |-- d3
     |    |-- d3.js
     |-- luciad
          |-- ...

我的 index.html 包含以下代码:

<script src="./lib/requirejs/require.js" type="text/javascript"></script><!-- require.js -->
<script src="./js/amdconfig.js" type="text/javascript"></script><!-- require.js config -->
<script type="text/javascript">
    require(["app/js/main"]); /* main module */
</script>

我的 amdconfig.js 文件包含以下代码:

(function(configure, app) {
  var lib = [app, "lib"].join("/");
  configure({
    baseUrl : app,
    urlArgs : "bust=" + (new Date()).getTime(),
    packages : [{
      name : "requirejs",
      location : [lib, "requirejs"].join("/")
    }, {
      name : "luciad",
      location : [lib, "luciad"].join("/")
    }, {
      name : "d3",
      location : [lib, "d3"].join("/")
    }, {
      name : "app",
      location : app
    }],
    cache : {}
  })
})(
  require.config ? require.config /* RequireJS */ : require, /* Dojo */
  '.'
)

我的构建脚本

我有一个具有以下结构的构建脚本:

builder
|-- build.js
|-- package.json

如果有如下代码:

require('requirejs').optimize({
  baseUrl: '../src',
  paths: {
    main: 'main',
    requirejs : './lib/requirejs',
    luciad : './lib/luciad',
    d3 : './lib/d3',
    app : './'
  },
  name: 'js/main',
  out : '../dist/main.js',
  optimize: "uglify2",
  uglify2: {
    output: {
      beautify: false
    },
    compress: {},
    warnings: true,
    mangle: true
  }
}, function (buildResponse) {
  console.log(buildResponse);
});

我的问题

构建脚本确实会生成一个缩小的 main.js 文件,并按预期在控制台中输出包含文件的列表。

但是,当我将 srcmain.js 替换为我刚刚生成的 main.js 时,没有任何反应。我的应用没有启动,也没有收到任何错误。

我在这里错过了什么?


注意事项

如果我不缩小我的代码,我会得到相同的行为。

生成的文件由一大堆这种格式的模块组成:

define('namespaced/path',["dependency1", "dependency2"], function(a,b){...});

我想这是预期的格式......

最佳答案

我设法弄清楚是什么导致了我的问题。

生成的输出看起来是这样的:

define('luciad/util/create',[],function(){...});
define('luciad/error/_createError',["../util/create"],function(a){...});
define('luciad/error/ProgrammingError',["./_createError"],function(a){...)});
...
define('js/main',[...],function(...){...});

注意最后一行。在那里,我的主模块称为 js/main .但是,我的主模块在我的 HTML 文件中是这样调用的:

require(["app/js/main"]);

所以,发生了什么,是require(["app/js/main"])无提示地失败,因为它找不到名为 app/js/main 的模块.

解决方案非常简单。我所要做的就是重命名 name来自 js/main 的参数至 app/js/main .现在,一切都按预期进行。

我不知道我怎么会错过这个,但我猜 require(["app/js/main"]) 的无声失败没有完全帮助。

关于javascript - 由 r.js 驱动的 Node 构建脚本生成的文件似乎没有执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728683/

相关文章:

javascript - 在 KnockoutJS ViewModel 上定义函数

javascript - “document.write(‘hello world\n’ 之间有什么区别);”和 “document.writeln(‘hello world’);”?

node.js - 获取 Axios 错误 : connect ETIMEDOUT when making high volume of calls

angularjs - 如何从项目外部提供静态页面?

node.js - 控制特定的音频输出,例如减少来自Electron中浏览器的音频

javascript - 切换后重置 div 值

javascript - jquery中如何删除大括号内的字符?

javascript - requirejs 模块不将路径键识别为键并查找键,就好像它是文件名一样

javascript - 让依赖项在 requirejs 中正确加载(autobahn 和 whenjs)

javascript - 如何使用 AngularJS 和 RequireJS 从外部文件注入(inject)服务?