2015-10-03 32 views
1

我正在尝试在我的webpack项目中包含模块化第三方库(PhysicsJS)。该库对AMD和CommonJS友好,并且具有我想要访问的格式良好的子模块。但它主要是通过require.config()中的packages定义规范为RequireJS构建的,因此入口点不是标准index.js。相反,入口点是physicsjs.js解决webpack中的外部子模块依赖

换句话说,我似乎无法弄清楚如何配置webpack来解析库的主文件及其子模块。看起来好像图书馆的入口点不是index.js,它有子模块,你运气不好,我不能相信这是正确的,所以我必须错过一些东西。

那么,如何解决下面的陈述呢?

require('physicsjs'); // entry point 
require('physicsjs/bodies/rectangle'); // submodule 

我已经试过这种配置的变化:

resolve: { 
    modulesDirectories: [ 
     'js/bower_components' 
    ], 
    alias: { 
     'physicsjs': 'PhysicsJS/dist/', 
     // doesn't find physicsjs.js 

     'physicsjs': 'PhysicsJS/dist/physicsjs.js' 
     // doesn't find the submodules 
    } 
}, 

的目录结构看起来是这样的:

+ js 
    - main.js 
    + bower_modules 
    + PhysicsJS 
     + dist 
     - physicsjs.js // module entry point 
     + bodies 
      - rectangle.js // desired submodule 
    + lib 
    - MyModule.js 

注意PhysicsJS确实有整个库的缩小版本,如果没有其他选择,我将使用它,但我宁愿只加载实际使用的内容。

而且,子模块本身使用require('physicsjs'),因此调用require('physicsjs/physicsjs')不是一个解决方案

回答

1

解决方案是声明别名两次,首先作为完全匹配(使用尾随$),然后再次作为正常匹配(无尾随$)。所以我的配置现在看起来更像这样:

resolve: { 
    modulesDirectories: [ 
     'js/bower_components' 
    ], 
    alias: { 
     'physicsjs$': 'PhysicsJS/dist/physicsjs.js', // Exact match 
     'physicsjs': 'PhysicsJS/dist' // and again with a fuzzy match 
    }, 
},