【发布时间】:2018-06-23 01:46:36
【问题描述】:
我正在创建一些实验性网站,它们使用 JavaScript 而不进行捆绑。对于依赖管理,我一直使用 RequireJS,但最近我开始使用 SystemJS,因为它对 HTTP2 有一些非常好的支持。到目前为止,我已经在我的自定义设置 Web 服务器上做了一些实验,结果对于我正在创建的网站来说非常好。例如,首页渲染发生在 400 毫秒左右,整页加载发生在 800 毫秒等。
我这样做是因为我想充分利用 HTTP2,并且我想延迟加载我在某个时刻使用的脚本。像这样的代码更容易维护,缓存更好等等。目前对 Webpack 之类的打包工具很热,但这不是我想要使用的东西。
问题来了:有没有办法使用 Gulp 编译单个 Vue 文件/组件,然后使用 SystemJS 作为 AMD 或 CommonJS 模块加载它们?
编辑:
这就是我想用 SystemJS 和 Vue 实现的目标:
入口点JS文件:
// SystemJS config
SystemJS.config({
/* ... */
baseURL: './',
map: {
// App
'app': 'scripts/app.min.js',
// Utils
'axios': 'scripts/vendor/axios/axios.min.js',
'modernizr': 'scripts/vendor/modernizr/modernizr.min.js',
// Framework
'vue': 'scripts/vendor/vue/vue.min.js',
// Components
'vueHelloWorld': 'scripts/components/hello/vueHelloWorld.js', // <- Compiled VUE component
'vueMenu': 'scripts/components/menu/vueMenu.js'
},
depcache: {
'vueHelloWorld': ['vue'],
'vueMenu': ['vue', 'vueHelloWorld']
}
/* ... */
)};
// Initially Load default scripts
require(['modernizr', 'axios', 'app']);
Vue 组件 vueHelloWorld.js 和 vueMenu.js 是最终结果,从单个文件模板 vueHelloWorld.vue 和 vueMenu.vue 编译成纯 JS。
在那个初始文件之后,app.min.js 被加载,它会声明加载渲染的 vue 组件。
这是我不知道该怎么做的——如何为我想以这种方式加载的每个 Vue 组件呈现单独的文件?
【问题讨论】:
-
我认为systemjs-builder 会引起您的兴趣。要研究的另一件事是让您的转译器为每个源模块输出匿名注册模块。
-
我想避免捆绑,其次我想将每个 vue 组件渲染成一个单独的文件,可以根据需要加载(必需)。
-
转译到匿名注册模块可以实现这一点。你想compile而不是bundle,我说得对吗?
-
我已经扩展了我的问题,现在更清楚了吗?
-
本文描述了一种方法,但不确定它与您的结构的其余部分的匹配程度:medium.com/@jamesweee/…
标签: javascript vue.js gulp vuejs2 vue-component