使用webpack处理具有外部依赖关系的AMD库

问题描述:

我有一个用AMD风格编写的库,可以与RequireJS一起使用。假定图书馆的用户提供jqueryjquery-ui。说它看起来像这样:使用webpack处理具有外部依赖关系的AMD库

// main-lib.js 
define(['jquery', './aux-lib.js'], function ($) { ..(1).. }); 

// aux-lib.js 
define(['jquery', 'jquery-ui'], function ($) { ..(2).. }); 

我想弄清楚webpack的工作原理。例如,假设我想这些文件打包成一个单一的AMD样式库文件,该文件还假定jqueryjquery-ui从外面:

// out.js 
define(['jquery', 'jquery-ui'], function ($) { ..(1)..(2).. }); 

这是如何实现的呢?

当我运行main-lib.jsentry - 点的WebPack,它会抱怨它无法找到jqueryjquery-ui。如果我用resolve.alias配置正确的路径,它将jqueryjquery-ui捆绑到out.js,这不是我想要的。我尝试使用output.externals无济于事。

这是我的一个非常简单,愚蠢的错误。相关字段不是output.externals,而只是externals。请参阅here。其他两个相关领域介绍有output,但externals不是。可以是数组,也可以是数组。这是我目前的配置:

{ 
    entry: './main-lib.js', 
    output: { 
     path: './', 
     filename: 'out.js', 
     libraryTarget: 'amd' 
    }, 
    externals: ['jquery', 'jquery-ui'] 
} 

它的工作很好。

+0

因此,基本上你只是说“忽略jquery和jquery-ui”,那么我认为你的银行业务是因为你的代码使用了全局变量的专有名称(因此你为什么没有指定全局变量这里的名字)? – trusktr 2015-04-21 00:15:44

+0

我在说“不要把jquery和jquery-ui放在输出库中”。我根本没有在全局变量上进行操作; jquery的输出是通过模块参数提供的。我不必知道全局变量名称,因为jquery碰巧是AMD意识到的。如果不是这样,你会怎么做? – mhelvens 2015-04-21 09:18:21