我有这种情况,我试图导入一个现有的库,我将调用它troublesome
(使用 Webpack/Babel FWIW),它有一个全局引用jQuery
,我试图使用模块语法来解决它。
我已通过以下方式成功将 jquery 导入模块的“本地”范围:
import jQuery from 'jquery'
所以我尝试了:
import jQuery from 'jquery'
import 'troublesome'
但也许并不奇怪,我得到了一些类似jQuery is not a function
的东西troublesome.js
我也试过这个:
System.import('jquery')
.then(jQuery => {
window.jQuery = jQuery
})
import 'troublesome'
但是,事实证明这System.import
是所谓的“模块加载器”规范的一部分,该规范是从 es6/2015 规范中提取的,所以它不是由 Babel 提供的。有一个poly-fill,但 Webpack 无论如何都无法管理通过调用来完成的动态导入System.import
。
但是...如果我像这样调用 index.html 中的脚本文件:
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/troublesome/troublesome.js"></script>
<script src="the-rest-of-my-js.js"></script>
对的引用jQuery
已解决troublesome.js
,一切都很好,但我宁愿避免使用脚本标签路由,因为 webpack 不管理这些路由。
任何人都可以推荐一个体面的策略来处理这样的场景吗?
更新
在@TN1ck 的一些指导下,我最终能够使用imports-loader确定一个以Webpack 为中心的解决方案
此解决方案的配置如下所示:
//...
module: {
loaders: [
//...
{
test: require.resolve('troublesome'),
loader: "imports?jQuery=jquery,$=jquery"
}
]
}