Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - imdreamrunner/browser-vue-loader: 💥 Run Vue apps in browser. No transpilation, no sweat! · GitHub
Skip to content

Repository files navigation

Browser Vue Loader

Browser Vue Loader

Build StatusNPM Version

Browser Vue Loader is a single file JavaScript library that loads untranspile Vue applications into the browsers.

This loader is ideal for rapid prototyping. With the loader, you don't have to configure built tools, but rather write the application code and run them in the browser.

In many ways, this loader behaves very similar to the vue-loader for Webpack. The major difference is that this loader does not access the local file system and requires no build steps.

We prefer convention over configuration in this loader. You can load Vue's single-file component, ES module, NPM packages, SASS styles and even images directly!

Usage

The Preferred Way

Include the loader and write your script within a <script type="boom!">.

<scriptsrc="https://unpkg.com/browser-vue-loader"></script><scripttype="boom!">importVuefrom'vue';importAppfrom'./path-to-your/App.vue';newVue({render: h=>h(App)}).$mount('#app')</script>

But You Also Can

Include Vue and the loader into your HTML file. And you can load Vue modules by the loadVue function. The loaded module will be returned as a promise.

<divid="app"></div><scriptsrc="https://unpkg.com/vue"></script><scriptsrc="https://unpkg.com/browser-vue-loader"></script><script>loadVue('./App.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})</script>

Supporting Features

Loads Vue single-file components from a URL

The loadVue method can load Vue single-file components. The method takes only one argument, which is the URL of the file to be fetched from. The URL must be either relative or full, such as ./App.vue or http://example.com/path/to/App.vue.

In the following example, we load the ./single-file-app.vue component by loadVue('./single-file-app.vue'). The loadVue method will return a Promise of the component. When the promise is resolved, we can create the Vue app by mounting it to a DOM element.

loadVue('./single-file-app.vue').then(App=>{newVue({render: h=>h(App)}).$mount('#app')})

Loads any ES module from a URL

Beside Vue single-file components, the loader can actually load any ES module to the web page.

In the following example, a ES component is loaded by loadVue('./sample-es-module').

Use import statement as usual

In the <script type="boom!"> or your source code, you can also use the import statement to load another module. Just as what you would do normally with webpack and babel configured.

importAppfrom'./App.vue';

The loader's module system is based on the WhatWG loader specification, which describes the behavior of loading JavaScript modules from a JavaScript host environment.

A more complete example of a Vue application is the TODO MVC, which contains of two components App.vue and Todos.vue.

Loads a CommonJS or AMD module from a URL or NPM registry

The loader can directly load a CommonJS or AMD module from NPM registry, if the name of the module cannot be resolved to a valid URL.

For example, by writing

importVuefrom'vue';

The loader will realise that the string vue is not a valid URL, so it will search for the package use the unpkg.com CDN. The actual URL of the module will be resolved to https://unpkg.com/vue@2.5.16/dist/vue.js.

By default, the loader will process the module as a CommonJS module. You can specify the process by adding the prefix <processor>! to the module name.

For example, the following 2 import statements are working.

importVuefrom'commonjs!vue';// Treat the module as a CommonJS moduleimport_from'amd!lodash';// Treat the module as an AMD module

Use Vuex

Vuex is a aentralized state management library for Vue. You can use Vuex in your project with this loader.

importVuefrom'vue'importVuexfrom'vuex'import{state,mutations}from'./mutations'importpluginsfrom'./plugins'Vue.use(Vuex)exportdefaultnewVuex.Store({
state,
mutations,
plugins
})

Functional component by template

You can write Vue's functional component in a .vue file. All you need is to mark the <template> to be functional, as the example below.

<templatefunctional><div><h1class="inside">Hello from {{ props.location }}!</h1></div></template>

Use JSX

Sometimes you may wish to write a render function instead of a template. JSX allows you to write something similar to HTML tags inside JavaScript.

<script>importHelloComponentfrom'./hello-component.vue'exportdefault{data(){return{msg: 'Hello!'}},render: function(h){return(<div><h1class="outside">{this.msg}</h1><HelloComponentlocation="the other side"/></div>)}}</script>

Scoped CSS

Scoped CSS is supported in single-file components.

<stylescoped>
.example {
color: red;
}
</style><template><divclass="example">hi</div></template>

Note: the second line in this example is created by the child component with a scoped CSS style setting the color to blue.

SASS (with both SCSS and SASS style)

Feel free to use SASS in the single-file component. CSS processors are already configured for you.

<stylelang="scss">
$purple-color: rgb(128, 0, 128);
.purple {
color: $purple-color;
}
</style>

Use @import in CSS or SASS

You can use @import in the CSS or SASS code.

The loader will convert them into a special ES module and add to the registry. Same file will not be downloaded twice.

In the single-file component:

<stylelang="scss">@import"sample-scss";
.pink {
color: $pink-color;
}
</style>

In sample-scss.scss

$pink-color: rgb(255, 192, 203)

CSS Modules

Modularize your CSS by CSS Modules. They are supported!

For example, the .banana style below can be accessed by this.$style.banana.

<stylemodule>
.banana {
color: yellow;
}
</style>

And the .orange style below can be accessed by this.namedModule.orange.

<stylemodule="namedModule">
.orange {
color: orange;
}
</style>

Images

A web page is not complete without images. You can import images as if an ES module, and use them like a URL.

The image will be fetched and converted to base64 data URL automatically.

<template><divclass="app"><imgclass="image-1" :src="pngImage" /><imgclass="image-2" :src="svgImage" /></div></template><script>importpngImagefrom"./logo.png"importsvgImagefrom"./logo.svg"exportdefault{data(){return{pngImage, svgImage}}}</script>

Contributors's Guide

Want to contribute to this loader? That's great!

We recommend you to use yarn to manage the dependencies. However, you can certainly use npm instead.

After cloning the repository, use yarn command to install the dependencies. Other commands and their descriptions are below.

CommandDescription
yarnInstall the dependencies.
yarn devRun the webpack dev server.
yarn buildBuild the library.
yarn testRun the test cases with karma.
yarn start-testStart karma test runner.
yarn run-test --grep="Test Name"Run single test.

Note: we chose to commit dist directory to git for convenience. There is so far no issue for it. However we might consider ignoring it from our git repository if it grows too big one day.

Credits

The cat in our banner is from the openclipart.org.

About

💥 Run Vue apps in browser. No transpilation, no sweat!

Topics

Resources

Stars

30 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages