weex-bindingx
Version:
bindingx,expression,binding,weex
186 lines (171 loc) • 4.35 kB
JavaScript
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const pathTo = require('path');
const fs = require('fs-extra');
const colors = require('chalk');
let entry = {};
let weexEntry = {};
let fileType = '';
function walk(dir) {
dir = dir || '.';
const directory = pathTo.join(__dirname, 'demo/vue', dir);
fs.readdirSync(directory)
.forEach((file) => {
const fullpath = pathTo.join(directory, file);
const stat = fs.statSync(fullpath);
const extname = pathTo.extname(fullpath);
if (stat.isFile() && extname === '.vue') {
if (!fileType) {
fileType = extname;
}
const name = pathTo.join(dir, pathTo.basename(file, extname));
entry['demo/vue/' + name + '.bundle'] = fullpath.replace(/\.vue/, '.js') + '?entry=true';
weexEntry['demo/vue/' + name + '.bundle'] = fullpath + '?entry=true';
} else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
const subdir = pathTo.join(dir, file);
walk(subdir);
}
});
}
walk();
let webConfig = {
// devtool: '#inline-source-map',
entry,
output: {
path: __dirname,
filename: '[name].js'
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('development'),
}),
new webpack.NoEmitOnErrorsPlugin(),
new webpack.ProgressPlugin()
],
module: {
loaders: [
{
test: /\.css$/,
use: [
'vue-style-loader',
'css-loader'
],
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
optimizeSSR: false,
postcss: [
// to convert weex exclusive styles.
require('postcss-plugin-weex')(),
require('autoprefixer')({
browsers: ['> 0.1%', 'ios >= 8', 'not ie < 12']
}),
require('postcss-plugin-px2rem')({
// base on 750px standard.
rootValue: 75,
// to leave 1px alone.
minPixelValue: 1.01
})
],
compilerModules: [
{
postTransformNode: el => {
// to convert vnode for weex components.
require('weex-vue-precompiler')()(el)
}
}
]
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}]
}
};
let weexConfig = {
// devtool: '#inline-source-map',
entry: weexEntry,
// entry: getEntries(),
output: {
path: __dirname,
filename: '[name].js'
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('development'),
}),
new webpack.BannerPlugin({
banner: '// { "framework": "Vue" }\n',
raw: true,
exclude: 'Vue'
}),
new webpack.NoEmitOnErrorsPlugin(),
new webpack.ProgressPlugin()
],
module: {
loaders: [
{
test: /\.css$/,
use: [
'vue-style-loader',
'css-loader'
],
},
{
test: /\.vue(\?[^?]+)?$/,
use: [{
loader: 'weex-loader',
options: {}
}]
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}]
}
};
var webServer = new WebpackDevServer(webpack(webConfig), {
publicPath: webConfig.output.publicPath,
public: '0.0.0.0',
disableHostCheck: true,
stats: {
colors: true,
chunks: false,
errorDetails: true,
},
});
webServer.listen(9998, function () {
console.log(colors.green('\n Open http://localhost:9998/demo/ \n'));
});
let weexServer = new WebpackDevServer(webpack(weexConfig), {
publicPath: weexConfig.output.publicPath,
public: '0.0.0.0',
disableHostCheck: true,
stats: {
colors: true,
chunks: false,
errorDetails: true,
},
});
weexServer.listen(9997, function () {
console.log(colors.green('\n Open http://localhost:9997/demo/ \n'));
});