如何使用webpack在js文件中加载CDN或外部供应商的JavaScript库,而不是在html文件中

我正在使用反应入门套件进行客户端编程。 它使用反应和webpack。 没有index.html或任何html来编辑,所有的js文件。 我的问题是,如果我想从云加载供应商js库,我该怎么做?

在html文件中这将很容易做到这一点。 <script src="https://forio.com/tools/js-libs/1.5.0/epicenter.min.js"></script>

但是,在js文件中,它只使用npm安装的软件包。 我怎样才能导入上述库没有HTML文件? 我试过导入和要求,他们只适用于本地文件。

更新10/21/15到目前为止,我尝试了两个方向,既不理想。

  1. @minheq是的,有一个html文件的反应启动工具包。 它是src / components / Html下的html.js。 我可以把云lib和它的所有依赖关系放在这里:
  <div id="app" dangerouslySetInnerHTML={{__html: this.props.body}} /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script src="https://forio.com/tools/js-libs/1.5.0/epicenter.min.js"></script> <script src="/app.js"></script> <script dangerouslySetInnerHTML={this.trackingCode()} /> </body> 

好消息是它的工作原理,我不需要在js文件中做任何事情,也不需要导入或者需要。 不过,现在我有两个jQuery的库以不同的方式加载。 一个在这里,另一个通过npm和webpack。 我不知道以后会给我带来麻烦。 我使用的反应路由给我'未定义的variables'错误,如果我在浏览器窗口中input一个无主path由于服务器端加载我猜。 所以这个解决scheme不是很好。

  1. 使用webpack外部function。 这被logging为: 链接 。 “你也可以在应用程序中使用外部选项,当你想要将现有的API导入到bundle中时,也就是说你想使用CDN中的jquery(单独的标签)并且仍然需要(”jquery“)。将其指定为外部:{externals:{jquery:“jQuery”}}“。 然而,我发现几个地方的文档都是如何做到这一点的挑剔。 到目前为止,我不知道如何使用它来代替<script src="https://forio.com/tools/js-libs/1.5.0/epicenter.min.js"></script>在html中。

有一个html文件肯定被用来提供附加你的js包的用户。 可能你可以将脚本标签附加到该html文件中

externals不是为了让你这样做。 这意味着“不要把这个资源编译成最终的包,因为我自己会包含它”

你需要的是一个脚本加载器的实现,如script.js 。 我还写了一个简单的应用程序来比较不同的脚本加载器实现: 链接 。

你可以在你的JS中创build一个脚本标签

 $("body").append($("<script src="https://forio.com/tools/js-libs/1.5.0/epicenter.min.js"></script>")) 
 var $script = require("scriptjs"); $script("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() { $('body').html('It works!') }); 

使用webpack的外部 :

externals允许你指定你的库的依赖关系,这些依赖关系不是由webpackparsing的,而是成为输出的依赖关系。 这意味着它们在运行时从环境中导入。