Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Micene09/vue-ts-amd
A full-featured Vue.js 2 boilerplate using AMD pattern (Require.js) and Typescript
https://github.com/Micene09/vue-ts-amd
Last synced: 26 days ago
JSON representation
A full-featured Vue.js 2 boilerplate using AMD pattern (Require.js) and Typescript
- Host: GitHub
- URL: https://github.com/Micene09/vue-ts-amd
- Owner: Micene09
- Archived: true
- Created: 2017-09-01T17:56:40.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-11-19T14:31:09.000Z (over 5 years ago)
- Last Synced: 2024-01-08T08:51:16.487Z (5 months ago)
- Language: JavaScript
- Homepage:
- Size: 168 KB
- Stars: 14
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Lists
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue. - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd ★10 - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
- awesome-vue - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Components & Libraries / Scaffold)
- awesome-vuejs - vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript. (Scaffold / Client)
README
# vue-ts-amd
> A full-featured Vue.js 2 boilerplate using AMD pattern and Typescript
This boilerplate was built from scratch, with the help of the Vue.js community, just to cover the need (mostly mine) to use the [AMD](https://en.m.wikipedia.org/wiki/Asynchronous_module_definition) pattern and Typescript tech.
## Features and Stack
- Modular programming using [Require.js](http://requirejs.org)
- Easy module mapping system to require dependencies dinamically (from node_modules, bower_components or wathever)
- [Karma](https://karma-runner.github.io/1.0/index.html) as test runner
- [Mocha](https://mochajs.org), [Chai](http://chaijs.com), [Avoriaz](https://github.com/eddyerburgh/avoriaz/) as test libraries
- Code using Typescript in both develop and unit-tests
- Stylize modules using [Sass](http://sass-lang.com), define settings for modular files or bundels
- Live reload/injection in dev mode using [BrowserSync](https://www.browsersync.io)
- [Gulp.js](https://gulpjs.com) (internal use)
- Generate compiled and minified files ready for production## Installation
This is a project template for [vue-cli](https://github.com/vuejs/vue-cli/blob/master/README.md), install it via terminal using:
```
npm i -g vue-cli
```Then install the boilerplate:
```
vue init Micene09/vue-ts-amd my-project
cd my-project
npm i
```...or just download this repo, all you need is in template folder.
## Modules Mapping System
### Usage
In the root path of this boilerplate, you will find a file named **modules.json** with the following schema:
```javascript
{
"module_name" {
"max": "path to the maximized/normal file" // << required
"min": "path to the minified file" // << optional
}
}
```...just for example:
```javascript
{
"vue": {
"min": "/node_modules/vue/dist/vue.min.js",
"max": "/node_modules/vue/dist/vue.js"
}
}
```Consider to map AMD/UMD version only for every 3rd party module to get everything working.
If you are using a module from node_moduels folder like the example above, **the module_name should be the same as node module**, just like *require("the npm module name")* in Node.js .
In this way, you will be able to import modules with working typings and intelligence (if you are using Visual Studio Code or similar) as usual:
```typescript
// typescript file:
import Vue from "vue";
import _ from "lodash";new Vue({...});
```### Build processes explained
Running dev or release build process...
- Every module mapped in modules.json, will be copied and renamed to **modules/[module name].js**
- A new file named **require.modules.js** will be created in both dev and release, containing the [require.js path mapping](http://requirejs.org/docs/api.html#config-paths) for every module mapped in modules.json .***It's very important to include the require.modules.js file in your entry point html code.***
Use the following as guide to boot your entry point:
```html
```
Note that require.js was mapped in modules.json, then included in page using *modules/require.js* as URL.
Check *src/index.html* and *modules.json* provided in this repo.
## Included scripts
### npm run test
Will run tests (*.ts) located inside */test* folder in watch mode.
Tests will restarts after every typescript file change inside */test*.### npm run dev-prepare
Will prepare (**compile**) the project's files inside */src* folder to the */build* folder.
The **maximized** modules version defined in modules.json will be copied to */build/modules*.### npm run dev
Will prepare the project's files as the *npm run dev-prepare*, then will execute the BrowserSync instance using live reload/injection.
Your default browser will open up at the end of this process and...- For every typescript file change inside */ts* folder, a ts compile will run (using gulp-typescript) with an automatic browser reload at the end
- For every html/vue file change, the file will be copied to */build/[relative path]* and browser will reload.
- For every scss file change, a sass compile will run (using gulp-sass), compiling just the saved *.scss, the resulting css file will be copied to the */build/[relative path]* folder (respecting his original path inside */src*) and injected in page without reloading browser.Check [BrowserSync](https://www.browsersync.io) for other related features.
### npm run release
Will prepare (**compile**) the project's files inside */src* folder to the */release* folder.
Note: The **minified** modules version (if provided, otherwise the maximized version will be used) defined in modules.json will be copied to */release/modules*.
### npm run release-preview
Will prepare the project's files as the *npm run release*, then will execute the BrowserSync instance just to preview the release build of the project.
## GulpConfig.js
This file, located on root folder, will export an instance of a class (EventEmitter) containing project's settings and used during build process.
You can edit this file or override one of the following properties:
| Param name | Default value | Description |
| ----------------- | ------------------ | ---------------------------------------------------------------------------- |
| baseUrl | / | Base url provided to browserSync instance and generated require.modules.json |
| modulesConfigFile | require.modules.js | Filename used for mapping file generated using modules.json |
| modulesUrl | /modules/ | Http url to the modules folder |
| srcFolder | ./src | Sources folder |
| developFolder | ./build | Build folder, used by scripts: dev-prepare, dev |
| releaseFolder | ./release | Release folder, used by scripts: release, release-preview |
| sassConfig | ./sass.json | Sass config file |## Sass config file
Usually located on root folder, will provide the configuration for sass files watchers and bundles.
```json
{
"global_watch": [ // << an array of glob paths, defining files needed to watch."./src/components/**/*.scss",
"./src/views/**/*.scss"
],
"bundles": [ // << an array of objects, where every object is a bundle.{
"entry": "./src/main.scss", // the bundle entry point"watch": [ // the files to watch to generate this bundle
"./src/main.scss",
"./src/style/**/**.scss"
]
}
]
}
```## About .vue files
In my opinion, write a single file component is useful if this component is very simple...and for very simple things, vanilla javascript works good.
In this case, the [require-vuejs](https://github.com/edgardleal/require-vuejs) module is covering our needs.
While, when a component is increasing his complexity, reaching the need to be typed, i prefer to use separate set of files (.ts for source/definition, .html for templating, .scss for styling).
This is the reason why i'm not trying to code using typescript inside .vue files.