我想包括一个模块化的第三方库(PhysicsJS)到我的WebPack项目。该库对AMD和CommonJS友好,并具有我要访问的格式正确的子模块。但是,它主要通过RequireJS中的packages
定义规范为RequireJS构建require.config()
,因此入口点不是标准的index.js
。相反,入口点是physicsjs.js
。
换句话说,我似乎无法弄清楚如何配置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')
是不是一个解决方案。
解决方案是将别名声明两次,首先是完全匹配(使用尾随$
),然后再声明为常规匹配(不使用尾随$
)。所以我的配置现在看起来像这样:
resolve: {
modulesDirectories: [
'js/bower_components'
],
alias: {
'physicsjs$': 'PhysicsJS/dist/physicsjs.js', // Exact match
'physicsjs': 'PhysicsJS/dist' // and again with a fuzzy match
},
},
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句