spmjs / spm

Brand new static package manager.
http://spmjs.io
Other
903 stars 180 forks source link

spm3.6支持require.async? #1387

Closed haozileung closed 8 years ago

haozileung commented 8 years ago

原来的用法require.async在3.6下不能用了,报async 不存在。

是否有其它方法?

jaredleechn commented 8 years ago

可以试试使用load-on-demand

haozileung commented 8 years ago

嗯嗯,可以用。 不过有个问题:那些子模块的js build出来后的路径可以不可以配置?指异步加载的script 里的src属性,例子里的是在web的根目录,如果我相放到其它子目录内呢?

jaredleechn commented 8 years ago

异步require的文件路径是随意的,只要是你本地的就可以,但build出来的路径是不可以配置的,默认在dist的根目录下。

如果你使用require('./moduleA.js')这种常量方式,那么spm会把被require的js打包在一起。

如果你使用了require([src.name])这种变量的方式,那么spm会把你本地所有可能用到的js全部打包成一个0.js,并建立原文件名到模块的名的索引,这样所有模块都打包到一起的话,其实异步require的意义就不是很大了,因为你加载某一个模块的时候,也加载了全部的模块。

haozileung commented 8 years ago

感谢解答! 常量变量那个可以理解,一般模块都是在开发阶段就决定好了的,不会用到变量的方式。

关于build出来后的路径,看build出来的代码,在最后加载的时候有个基类变量。应该是来自webpack的output.public path变量,这个不能配置有点奇怪。估计是webpack问题。 参考例子:https://github.com/webpack/webpack/tree/master/examples/code-splitting

haozileung commented 8 years ago

我fork了spm-webpack项目,添加了public参数到spm build。问题解决~