Authored by 毕凯

Merge branch 'master' of git.dev.yoho.cn:web/yoho-activity-node

node_modules/
.eslintcache
npm-debug.log
# Created by https://www.gitignore.io/api/node
... ...
... ... @@ -13,16 +13,42 @@
"debug": "~2.2.0",
"express": "~4.13.1",
"hbs": "~3.1.0",
"lodash": "^4.6.1",
"morgan": "~1.6.1",
"request-promise": "^2.0.1",
"serve-favicon": "^2.3.0"
"serve-favicon": "^2.3.0",
"shelljs": "^0.6.0"
},
"pre-commit": [
"lint"
],
"devDependencies": {
"eslint-config-yoho": "^0.1.1",
"autoprefixer": "^6.3.5",
"babel": "^6.5.2",
"babel-core": "^6.1.21",
"babel-loader": "^6.1.0",
"babel-plugin-transform-runtime": "^6.1.18",
"babel-preset-es2015": "^6.1.18",
"babel-runtime": "^6.1.18",
"gulp": "^3.9.1",
"gulp-cssnano": "^2.1.1",
"gulp-postcss": "^6.1.0",
"gulp-sourcemaps": "^1.6.0",
"postcss-assets": "^4.0.1",
"postcss-calc": "^5.2.0",
"postcss-center": "^1.0.0",
"postcss-clearfix": "^1.0.0",
"postcss-crip": "^2.0.0",
"postcss-opacity": "^3.0.0",
"postcss-position": "^0.4.0",
"postcss-short": "^1.4.0",
"postcss-sprites": "^3.1.1",
"postcss-use": "^2.0.2",
"precss": "^1.4.0",
"vinyl-named": "^1.1.0",
"precommit-hook": "^3.0.0",
"webpack-stream": "^3.1.0",
"eslint-config-yoho": "^0.1.1",
"stylelint-config-yoho": "^1.1.0"
}
}
... ...
# 项目生成指南
## 每个活动模块前端资源按项目管理。使用Yo可自动生成项目目录
* npm install -g yo generators-yohos
* mkdir YourFolder in public
* cd YourFolder & run `yo yohos`
* ...
## Yeoman脚手架
[Turn to npm](https://www.npmjs.com/package/generator-yohos)
\ No newline at end of file
... ...
npm-debug.log
node_modules/
dist/
\ No newline at end of file
... ...
/*# sourceMappingURL=index.css.map */
... ...
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.css","sourceRoot":"/source/","sourcesContent":[]}
\ No newline at end of file
... ...
/**
* gulp
* author: xuqi(qi.xu@yoho.cn)
* date: 2015/9/30
*/
var gulp = require('gulp');
var webpack = require('webpack-stream');
var postcss = require('gulp-postcss');
var sourcemaps = require('gulp-sourcemaps');
var cssnano = require('gulp-cssnano');
var named = require('vinyl-named');
var cp = require('child_process');
var fs = require('fs');
var config = JSON.parse(fs.readFileSync('./package.json').toString());
var root = `dist/${config.name}/`;
var distDir = {
js: root + config.version,
css: root + config.version,
img: root + 'assets/img',
font: root + 'assets/font'
};
gulp.task('default', ['postcss-dev', 'postcss-watch', 'js', 'server']);
//根据环境变量生成postcss插件配置
function postcssEnvPlugin(env) {
var sprites = {
spritesmith: {
padding: 2
},
groupBy: function(file) {
// 根据目录分组,防止合并后的图片太大
var group = file.url.split('/')[1];
return group ? Promise.resolve(group) : Promise.reject();
},
filterBy: function(file) {
//使用resolve转化后静态资源生成../img或者../assets/img/的路径
if (/\/img/.test(file.url) || /data:image/.test(file.url)) {
return Promise.reject();
}
return Promise.resolve();
}
},
assets,
plugins;
if (env === 'DEV') {
assets = {
loadPaths: ['font/', 'img/'],
relativeTo: 'css/'
};
Object.assign(sprites, {
basePath: './img',
stylesheetPath: './css',
spritePath: './img'
});
} else if (env === 'PRO') {
assets = {
loadPaths: [distDir.img, distDir.font],
relativeTo: distDir.css
};
Object.assign(sprites, {
basePath: distDir.img,
stylesheetPath: distDir.css,
spritePath: distDir.img
});
}
plugins = [
require('autoprefixer')({
browsers: ['not ie < 8']
}),
require('precss'),
require('postcss-assets')(assets),
require('postcss-sprites').default(sprites),
require('postcss-calc'),
require('postcss-opacity'),
//可选
require('postcss-use')({
modules: ['postcss-clearfix', 'postcss-crip', 'postcss-short', 'postcss-center', 'postcss-position']
})
];
//正式环境为assets和img加no-cache
if (env === 'PRO') {
plugins.push(require('postcss-cachebuster')({
imagesPath: '/' + distDir.img,
cssPath: '/' + distDir.css
}))
}
return plugins;
}
//Postcss开发环境
gulp.task('postcss-dev', function() {
return gulp.src('sass/index.css')
.pipe(sourcemaps.init())
.pipe(postcss(postcssEnvPlugin('DEV')))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('css/'))
});
gulp.task('postcss-watch', function() {
gulp.watch('sass/**/*.css', ['postcss-dev']);
});
//Postcss正式环境生成
gulp.task('postcss-pro', ['assets'], function() {
return gulp.src('sass/index.css')
.pipe(postcss(postcssEnvPlugin('PRO')))
.pipe(cssnano())
.pipe(gulp.dest(distDir.css))
});
gulp.task('js', function() {
return gulp.src('./index.js')
.pipe(named())
.pipe(webpack(require('./webpack.config.js')))
.pipe(gulp.dest(distDir.js))
});
//font+img->dist/assets
gulp.task('assets', ['img', 'font']);
gulp.task('img', function() {
return gulp.src('img/**/*')
.pipe(gulp.dest(distDir.img));
});
gulp.task('font', function() {
return gulp.src('font/*')
.pipe(gulp.dest(distDir.font))
});
//生成发布目录,可用于上传测试机
gulp.task('ge', ['assets', 'postcss-pro', 'js']);
//server
gulp.task('server', () => {
cp.exec('npm run start', (err, stdout, stderr) => {
if (err) {
console.log(`exec error: ${err}`);
}
});
});
\ No newline at end of file
... ...
/**
* gulp项目构建
* 微信抽奖
* @author: xuqi<qi.xu@yoho.cn>
* @date: 2016/3/
* @ate: 2016/3/30
*/
\ No newline at end of file
... ...
{
"name": "wxLottery",
"version": "0.0.1",
"author": "xuqi",
"email": "xuqi9010@gmail.com",
"scripts": {
"start": "node ../../bin/www"
}
}
\ No newline at end of file
... ...
/**
* weboack configuration
* @author: xuqi<qi.xu@yoho.cn>
* @date: 2016/3/29
*/
var webpack = require('webpack');
module.exports = {
watch: true,
module: {
loaders: [
{
test: /\.js$/i,
exclude: /node_modules/,
loader: 'babel'
}
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'lib',
minChunks: 2
})
],
babel: {
presets: ['es2015'],
plugins: ['transform-runtime']
}
};
\ No newline at end of file
... ...
# 控制器
\ No newline at end of file
# 控制器
## 模块定义规范
* 包含package.json
{
"name": "xx",
"version": "0.0.1"
}
* 包含index.js
入口文件,需要管理模块内所有依赖
... ...
{
"name": "wxLottery",
"version": "0.0.1"
}
\ No newline at end of file
... ...