Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript requirejs中的模块加载顺序_Javascript_Requirejs_R.js - Fatal编程技术网

Javascript requirejs中的模块加载顺序

Javascript requirejs中的模块加载顺序,javascript,requirejs,r.js,Javascript,Requirejs,R.js,我们在现有项目中遇到了一个有趣的问题 我们使用的是requireJS 我们所有的模块都与AMD兼容(我们有很多) 我们需要将巴贝尔polyfill的一个子集作为AMD模块加入到项目中 无法手动将此依赖项逐个添加到所有模块中 我们的代码使用r.js 我们的主文件如下所示://main.js require( [ 'router', 'someOtherModule', /* In reality we have quite a few more here */ ], functio

我们在现有项目中遇到了一个有趣的问题

  • 我们使用的是requireJS
  • 我们所有的模块都与AMD兼容(我们有很多)
  • 我们需要将巴贝尔polyfill的一个子集作为AMD模块加入到项目中
  • 无法手动将此依赖项逐个添加到所有模块中
  • 我们的代码使用
    r.js
  • 我们的主文件如下所示://
    main.js

    require(
    [
        'router',
        'someOtherModule', /* In reality we have quite a few more here */
    ], function(Router, AppModule) {/*... app code ...*/}
    )
    
    因此,我们希望在将任何其他模块加载到
    main.js

    什么不起作用:

  • 垫片-垫片用于非AMD模块
  • 将polyfill添加到上面的列表中
    路由器
    ——在r.js吐出的缩小代码中,不能保证
    polyfill
    实际上会出现在
    路由器
    之前的代码中,这不是定义的行为,因此不能指望
  • 用另一个
    require['polyfill']
    调用包装所有的东西似乎会把r.js优化器搞砸,如果其他模块包装在
    require[]
    中,它们似乎不会捆绑在一起
  • 由于
    polyfill
    是一个AMD模块,我们不能只将其包含在
  • 选项3仍然是我们正在调查的东西,看看是否可能


    所以问题是-我们试图做的是可能的吗?

    每当我加载多边形填充时,我总是将它们加载到
    头部的
    脚本
    元素中。我从不通过RequireJS加载它们。正如您所发现的,通过RequireJS加载它们会引起各种各样的问题。你写道:

    由于polyfill是AMD模块,我们不能仅将其包含在

    使用Browserify将
    babel polyfill
    包装入脚本,该脚本可通过
    script
    元素加载:

    #!/bin/sh
    set -ex
    
    BROWSERIFY_CMD="../../node_modules/browserify/bin/cmd.js"
    UGLIFY_CMD="../../node_modules/uglify-js/bin/uglifyjs"
    
    mkdir -p dist
    
    node $BROWSERIFY_CMD lib/index.js \
      --insert-global-vars 'global' \
      --plugin bundle-collapser/plugin \
      --plugin derequire/plugin \
      >dist/polyfill.js
    node $UGLIFY_CMD dist/polyfill.js \
      --compress keep_fnames,keep_fargs,warnings=false \
      --mangle keep_fnames \
      >dist/polyfill.min.js
    
    如果您检查dist/polyfill.js
    ,您会发现它不是AMD模块。(它调用的
    define
    函数不是AMD的
    define
    函数。)


    您应该能够根据您使用的
    babel polyfill
    的任何子集调整此方法。

    每当我加载polyfill时,我总是将其加载到
    头部的
    脚本
    元素中。我从不通过RequireJS加载它们。正如您所发现的,通过RequireJS加载它们会引起各种各样的问题。你写道:

    由于polyfill是AMD模块,我们不能仅将其包含在

    使用Browserify将
    babel polyfill
    包装入脚本,该脚本可通过
    script
    元素加载:

    #!/bin/sh
    set -ex
    
    BROWSERIFY_CMD="../../node_modules/browserify/bin/cmd.js"
    UGLIFY_CMD="../../node_modules/uglify-js/bin/uglifyjs"
    
    mkdir -p dist
    
    node $BROWSERIFY_CMD lib/index.js \
      --insert-global-vars 'global' \
      --plugin bundle-collapser/plugin \
      --plugin derequire/plugin \
      >dist/polyfill.js
    node $UGLIFY_CMD dist/polyfill.js \
      --compress keep_fnames,keep_fargs,warnings=false \
      --mangle keep_fnames \
      >dist/polyfill.min.js
    
    如果您检查dist/polyfill.js
    ,您会发现它不是AMD模块。(它调用的
    define
    函数不是AMD的
    define
    函数。)

    您应该能够使此方法适应您所使用的
    babel polyfill
    的任何子集