Open
Description
What problem does this feature solve?
As the author of nativescript-vue I had to set up a similar build setup as Vue's in order to be able to import certain parts of Vue directly into nativescript-vue. The main source of issues was the aliases used across the Vue repository (which do make sense btw!).
To solve that issue, I would love to have an official package for creating (and registering) custom renderers into Vue, which would enclose most of the Vue specific logic of patching / hydrating etc.
A good example of what I have in mind would be the react's package that does it: https://github.com/facebook/react/tree/master/packages/react-reconciler
I would love to get some work done on this, but I'd work with the core team to make sure the best possible quality.
What does the proposed API look like?
// my custom renderer
// for example: nativescript-vue.js
import VueRenderer from 'vue-renderer'
// a class for creating native views in NativeScript
import ViewUtils from './ViewUtils.js'
export default new VueRenderer({
// Node operations
createElement(tagName) {},
createElementNS(namespace, tagName) {},
createTextNode(text) {},
createComment(text) {},
insertBefore(parentNode, newNode, referenceNode) {},
removeChild(node, child) {},
appendChild(node, child) {},
parentNode(node) {},
nextSibling(node) {},
tagName(node) {},
setTextContent(node, text) {},
setAttribute(node, attribute, value) {},
// Additional methods that need to be specified
// but for example:
createRoot() {} // this would get called to create the root element for the root Vue instance
})
// then in userland we could just do
import Vue from 'vue'
import NativescriptVue from 'nativescript-vue'
Vue.use(NativescriptVue)
new Vue({
render(h) => h('label', { text: 'Hello World' })
})