Skip to content

Commit

Permalink
(next)Refactor build scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
QingWei-Li committed Sep 27, 2016
1 parent 5367203 commit 4885ab3
Show file tree
Hide file tree
Showing 49 changed files with 295 additions and 206 deletions.
4 changes: 0 additions & 4 deletions .babelrc

This file was deleted.

3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
release.sh
node_modules
lib
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ packages/**/lib
lib/*
!lib/index.js
!lib/style.css
node_modules
node_modules
example/dist
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
sudo: false
language: node_js
node_js:
- "5"
script: make dist
12 changes: 5 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,16 @@ dist:
npm run dist

dist-all:
node bin/build-all.js
node build/bin/build-all.js

deploy:
npm run deploy

pub: dist
git commit -am '[build]'
./node_modules/.bin/kp $(filter-out $@,$(MAKECMDGOALS))
git push eleme master --tags
pub:
npm run pub

pub-all: dist-all
./node_modules/.bin/lerna publish
pub-all:
npm run pub:all

help:
@echo " \033[35mmake\033[0m \033[1m命令使用说明\033[0m"
Expand Down
23 changes: 14 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
# mint-ui
# Mint UI (next)

[![Build Status](https://travis-ci.org/ElemeFE/mint-ui.svg?branch=next)](https://travis-ci.org/ElemeFE/mint-ui)
[![npm](https://img.shields.io/npm/v/mint-ui.svg?maxAge=3600)](https://www.npmjs.com/package/mint-ui)
![JS gzip size](https://badge-size.herokuapp.com/elemefe/mint-ui/master/lib/index.js.svg?compression=gzip&label=gzip%20size:%20JS)
![CSS gzip size](https://badge-size.herokuapp.com/elemefe/mint-ui/master/lib/style.css.svg?compression=gzip&label=gzip%20size:%20CSS)
[![NPM downloads](http://img.shields.io/npm/dm/mint-ui.svg)](https://npmjs.org/package/mint-ui)
![JS gzip size](http://img.badgesize.io/elemefe/mint-ui/next/lib/index.js.svg?compression=gzip&label=gzip%20size:%20JS)
![CSS gzip size](http://img.badgesize.io/elemefe/mint-ui/next/lib/style.css.svg?compression=gzip&label=gzip%20size:%20CSS)
[![Join the chat at https://gitter.im/ElemeFE/mint-ui](https://badges.gitter.im/ElemeFE/mint-ui.svg)](https://gitter.im/ElemeFE/mint-ui?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

> Mobile UI elements for vue.js
> Mobile UI elements for vue 2.0
- [Homepage](http://mint-ui.github.io)
- [Documentation](http://mint-ui.github.io/docs)

## Installation
```shell
npm i mint-ui -S
npm i mint-ui@next -S
```

## Usage
Expand Down Expand Up @@ -80,15 +83,17 @@ RawGit

NPMCDN

- https://npmcdn.com/mint-ui/lib/index.js
- https://npmcdn.com/mint-ui/lib/style.css
- https://unpkg.com/mint-ui/lib/index.js
- https://unpkg.com/mint-ui/lib/style.css

## Development

```shell
npm i cooking -g
make dev
npm run dev
```

## Contribution
Please make sure to read the [Contributing Guide](https://github.com/ElemeFE/mint-ui/blob/master/.github/CONTRIBUTING.md) before making a pull request.

## License
MIT
8 changes: 4 additions & 4 deletions bin/build-all.js → build/bin/build-all.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const components = require('../components.json');
const components = require('../../components.json');
const execSync = require('child_process').execSync;
const existsSync = require('fs').existsSync;
const path = require('path');
Expand All @@ -10,16 +10,16 @@ let componentPaths = [];
delete components.font;

Object.keys(components).forEach(key => {
const filePath = path.join(__dirname, `../packages/${key}/cooking.conf.js`);
const filePath = path.join(__dirname, `../../packages/${key}/cooking.conf.js`);

if (existsSync(filePath)) {
componentPaths.push(`packages/${key}/cooking.conf.js`)
componentPaths.push(`packages/${key}/cooking.conf.js`);
}
});

const paths = componentPaths.join(',');
const cli = `cooking build -c ${paths} -p`;

execSync(cli, {
stdio: 'inherit',
stdio: 'inherit'
});
63 changes: 32 additions & 31 deletions bin/build-entry.js → build/bin/build-entry.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
var Components = require('../components.json')
var fs = require('fs')
var render = require('json-templater/string')
var uppercamelcase = require('uppercamelcase')
var path = require('path')

var OUTPUT_PATH = path.join(__dirname, '../src/index.js')
var IMPORT_TEMPLATE = `import {{name}} from '../packages/{{package}}/index.js';`
var ISNTALL_COMPONENT_TEMPLATE = ` Vue.component({{name}}.name, {{name}});`
var Components = require('../../components.json');
var fs = require('fs');
var render = require('json-templater/string');
var uppercamelcase = require('uppercamelcase');
var path = require('path');

var OUTPUT_PATH = path.join(__dirname, '../../src/index.js');
var IMPORT_TEMPLATE = 'import {{name}} from \'../packages/{{package}}/index.js\';';
var ISNTALL_COMPONENT_TEMPLATE = ' Vue.component({{name}}.name, {{name}});';
var MAIN_TEMPLATE = `{{include}}
import '../src/assets/font/iconfont.css';
Expand All @@ -30,54 +30,55 @@ if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
};
module.exports = {
export default {
version: '{{version}}',
install,
{{list}}
};
`
`;

delete Components.font
delete Components.font;

var ComponentNames = Object.keys(Components)
var ComponentNames = Object.keys(Components);

var includeComponentTemplate = []
var installTemplate = []
var listTemplate = []
var includeComponentTemplate = [];
var installTemplate = [];
var listTemplate = [];

ComponentNames.forEach(name => {
var componentName = uppercamelcase(name)
var componentName = uppercamelcase(name);

includeComponentTemplate.push(render(IMPORT_TEMPLATE, {
name: componentName,
package: name
}))

}));

if ([
// directives
'InfiniteScroll',
'Lazyload',
'InfiniteScroll',
'Lazyload',

// services
'MessageBox',
'Toast',
'Indicator'
].indexOf(componentName) === -1) {
'MessageBox',
'Toast',
'Indicator'
].indexOf(componentName) === -1) {
installTemplate.push(render(ISNTALL_COMPONENT_TEMPLATE, {
name: componentName,
component: name
}))
}));
}

listTemplate.push(` ${componentName}`)
})
listTemplate.push(` ${componentName}`);
});

var template = render(MAIN_TEMPLATE, {
include: includeComponentTemplate.join('\n'),
install: installTemplate.join('\n'),
version: process.env.VERSION || require('../../package.json').version,
list: listTemplate.join(',\n')
})
});

fs.writeFileSync(OUTPUT_PATH, template)
console.log('[build entry] DONE:', OUTPUT_PATH)
fs.writeFileSync(OUTPUT_PATH, template);
console.log('[build entry] DONE:', OUTPUT_PATH);

24 changes: 24 additions & 0 deletions build/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
var Components = require('../components.json');
var path = require('path');
var externals = {};

Object.keys(Components).forEach(function(key) {
externals[`mint-ui/packages/${key}/index.js`] = `mint-ui/lib/${key}`;
externals[`mint-ui/packages/${key}/style.css`] = `mint-ui/lib/${key}/style.css`;
});

exports.externals = Object.assign({
vue: {
root: 'Vue',
commonjs: 'vue',
commonjs2: 'vue',
amd: 'vue'
}
}, externals);

exports.alias = {
'mint-ui': path.join(__dirname, '..'),
'src': path.join(__dirname, '../src')
};

exports.jsexclude = /node_modules|lib/;
28 changes: 28 additions & 0 deletions build/cooking.common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var cooking = require('cooking');
var webpack = require('webpack');
var config = require('./config');

cooking.set({
entry: './src/index.js',
dist: './lib/',
clean: false,
template: false,
format: 'cjs',
minimize: false,
moduleName: 'MINT',
extractCSS: 'style.css',
extends: ['vue2', 'saladcss', 'buble'],
alias: config.alias,
externals: config.externals
});

cooking.remove('output.publicPath');
cooking.add('output.filename', 'mint-ui.common.js');
cooking.add('loader.js.exclude', config.jsexclude);
cooking.add('loader.vue.exclude', config.jsexclude);

cooking.add('plugins.Define', new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('component')
}));

module.exports = cooking.resolve();
28 changes: 28 additions & 0 deletions build/cooking.component.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var cooking = require('cooking');
var Components = require('../components.json');
var webpack = require('webpack');
var config = require('./config');

cooking.set({
entry: Components,
dist: './lib/',
clean: false,
template: false,
minimize: false,
format: 'cjs',
extractCSS: '[name]/style.css',
extends: ['vue2', 'saladcss', 'buble'],
alias: config.alias,
externals: config.externals
});

cooking.remove('output.publicPath');
cooking.add('output.filename', '[name]/index.js');
cooking.add('loader.js.exclude', config.jsexclude);
cooking.add('loader.vue.exclude', config.jsexclude);

cooking.add('plugins.Define', new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('component')
}));

module.exports = cooking.resolve();
22 changes: 22 additions & 0 deletions build/cooking.conf.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
var cooking = require('cooking');
var config = require('./config');

cooking.set({
entry: './src/index.js',
dist: './lib/',
clean: false,
template: false,
format: 'umd',
moduleName: 'MINT',
extractCSS: 'style.min.css',
extends: ['vue2', 'saladcss', 'buble'],
alias: config.alias,
externals: { vue: config.externals.vue }
});

cooking.remove('output.publicPath');
cooking.add('output.filename', 'index.js');
cooking.add('loader.js.exclude', config.jsexclude);
cooking.add('loader.vue.exclude', config.jsexclude);

module.exports = cooking.resolve();
27 changes: 9 additions & 18 deletions scripts/cooking.demo.js → build/cooking.demo.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,32 @@
var path = require('path');
var cooking = require('cooking');
var webpack = require('webpack');
var config = require('./config');

cooking.set({
use: 'vue',
entry: {
app: path.join(__dirname, '../example/entry.js'),
vendor: ['vue', 'vue-router', 'fastclick']
},
entry: './example/entry.js',
dist: './example/dist',
template: path.join(__dirname, '../example/index.tpl'),
template: './example/index.tpl',
devServer: {
port: 8790,
port: 8789,
hostname: require('my-local-ip')(),
publicPath: '/',
log: false
},

clean: true,
hash: true,
publicPath: '/mint-ui/',
assetsPath: 'static',
urlLoaderLimit: 10000,
extractCSS: true,
extends: ['vue', 'lint', 'saladcss']
});

cooking.add('resolve.alias', {
'mint-ui': path.join(__dirname, '..'),
'src': path.join(__dirname, '../src')
sourceMap: true,
extends: ['vue2', 'lint', 'saladcss', 'buble'],
alias: config.alias
});

cooking.add('preLoader.js.exclude', /node_modules|lib/);
cooking.add('preLoader.vue.exclude', /node_modules|lib/);
cooking.add('loader.js.exclude', config.jsexclude);
cooking.add('loader.vue.exclude', config.jsexclude);

if (process.env.NODE_ENV === 'production') {
cooking.remove('entry.vendor');
cooking.add('externals.vue', 'Vue');
cooking.add('externals.vue-router', 'VueRouter');
cooking.add('fastclick', 'FastClick');
Expand Down
Loading

0 comments on commit 4885ab3

Please sign in to comment.