在JavaScriptCore中加载AMD模块

时间:2017-05-12 17:58:21

标签: javascript requirejs require amd javascriptcore

我想在JavascriptCore中加载一个javascript模块(在iOS上)。

我正在通过iOS端的普通HTTP请求获取文件的文本。所以我可以将整个字符串解析为JScontext。

但是现在我想加载该模块,理想情况下,解决任何其他依赖项,尽管这不是必需的。

我尝试过将requireJS用于节点,但似乎有很多依赖性错误,也许它有点过时了。

我也试过偷,但我不确定这是不是正确的道路。我也试过这个。 https://github.com/millermedeiros/nodefy

基本上我想在浏览器中做js所做的事情,但是在纯粹的javascript环境中(没有浏览器,没有节点)。

我还希望使用browserify捆绑所有内容,并查看过类似的内容 - RequireJS load string

问题是,当我去浏览代码时,(需要,requirejs)进程失败并且没有依赖关系?

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:4)

您提到的技术并不完全相互兼容。考虑像require('meow')这样的行。使用browserify / webpack / etc,将加载的文件是node_modules/meow/main.js(取决于package.json所说的是主文件)。在requirejs中,同一个文件将通过浏览器或项目的baseUrl根加载路径/meow。重写此方法的方法是在requirejs中添加配置选项。这真的很痛苦,因为它有效地导致您为node_modules中的每个包创建一个条目。简而言之,如果没有大量工作,你就无法将requirejs和browserify结合起来。

要使用browserify或webpack设置代码拆分,您需要为捆绑包定义新的入口点。然后,当您从应用程序加载它时,您需要通过执行fetch('https://myserver.com/bundle2.js').then()...之类的操作来加载该js包。有一些工具可以帮助您使用webpack或browserify来完成此任务。

  1. 使用Browserify的一些策略 - http://esa-matti.suuronen.org/blog/2013/04/15/asynchronous-module-loading-with-browserify/
  2. Webpack - https://webpack.github.io/docs/code-splitting.html
  3. 网络的故事现在不是很好(截至2017年)。大多数系统以某种自定义方式执行此操作。