2015-10-03 31 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 
    }, 
},