Javascript RequireJS优化器硬包含

Javascript RequireJS优化器硬包含,javascript,requirejs,r.js,requirejs-optimizer,Javascript,Requirejs,R.js,Requirejs Optimizer,我有一个大规模的客户端项目,我想把它捆绑成2个捆绑包,而不是1个 这是我的依赖关系树: 所需的输出将具有以下捆绑包: main包括b 仅包含a的x(因为b已包含在第一个捆绑包中,我不希望用户下载一段代码超过一次) 以下是我的优化器配置: ({ appDir: 'www', baseUrl: 'js/', mainConfigFile: 'www/js/require.config.js', dir: 'www-release', modules: [ {

我有一个大规模的客户端项目,我想把它捆绑成2个捆绑包,而不是1个

这是我的依赖关系树:

所需的输出将具有以下捆绑包:

  • main
    包括
    b
  • 仅包含
    a
    x
    (因为
    b
    已包含在第一个捆绑包中,我不希望用户下载一段代码超过一次)
  • 以下是我的优化器配置:

    ({
      appDir: 'www',
      baseUrl: 'js/',
      mainConfigFile: 'www/js/require.config.js',
      dir: 'www-release',
      modules: [
        {
          name: 'main',
          exclude: ['x']
        },
        {
          name: 'x',
          exclude: ['main']
        }
      ],
      optimize: 'none',
      removeCombined: true
    })
    
    我确实想从
    main
    中排除
    x
    的整个依赖关系树,但仍然包括我明确需要的模块,例如
    a

    我知道:

  • 包含
    -明确包含不直接需要的模块及其整个依赖关系树
  • exclude
    -排除模块实际上是排除其整个依赖关系树,在发生冲突时覆盖
    include
  • excludeshalf
    -包括模块的依赖关系树,包括模块本身

  • 既然如此,我看不到一个明确的方法来实现我想要的,你能帮我吗?

    你需要像这样使用requirer.js捆绑功能

    在require.config.js文件中

    ({
         appDir: 'www',
         baseUrl: 'js/',
        // mainConfigFile: 'www/js/require.config.js',// not need here
         dir: 'www-release',
         modules: [
            {
                name: 'main',
                create: true, // this will create www-release/main.js file(main bundle)
                include: ['main'],
                exclude: ['x']
            },
            {
                name: 'b',
                create: true,
                include: ['files for b bundle'],
                exclude: ['main']
            },
            {
                name: 'x',
                create: true,
                include: ['files for x bundle']
                exclude: ['main']
            }
       ],
       optimize: 'none',
       removeCombined: true
       paths: {
           //put paths object from requierjs.confige file 
       }
    });
    
    需要写包设置吗

    bundles: {
        x: ['files for x bundle'],
        b: ['files for b bundle']
    }
    
    在此之后,需要更改生成文件

    优化器配置文件

    ({
         appDir: 'www',
         baseUrl: 'js/',
        // mainConfigFile: 'www/js/require.config.js',// not need here
         dir: 'www-release',
         modules: [
            {
                name: 'main',
                create: true, // this will create www-release/main.js file(main bundle)
                include: ['main'],
                exclude: ['x']
            },
            {
                name: 'b',
                create: true,
                include: ['files for b bundle'],
                exclude: ['main']
            },
            {
                name: 'x',
                create: true,
                include: ['files for x bundle']
                exclude: ['main']
            }
       ],
       optimize: 'none',
       removeCombined: true
       paths: {
           //put paths object from requierjs.confige file 
       }
    });
    

    这种说法有效吗<代码>{name:'x',exclude:['main','b']}?顺便问一下,你考虑过使用webpack吗?这样做行不通,两个包中都会缺少b。关于webpack-我有,但现在我被requirejs卡住了,我不知道切换到webpack的成本是多少。我觉得不会很快。OP想要创建两个捆绑包,而不是3个。在这种情况下,只需添加2个模块和2个捆绑包