fz-react-cli
Version:
A CLI tool for build modern web application and libraries
142 lines (141 loc) • 3.96 kB
JavaScript
var path = require('path');
var webpack = require('webpack');
var CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
var fs = require('fs');
console.log(process.env.npm_package_umdVar);
//var host = process.env.npm_config_server_host || "localhost";
//var port = process.env.npm_config_server_port || "9292" ;
//var url = "htt" + "p://" + host + ":"+port;
var runHtml = process.env.npm_config_run_html || false;
var folder = process.env.npm_config_output_folder || 'build';
var watchMode = process.env.npm_config_watch_mode || false;
var isDocs = process.env.npm_config_is_docs || false;
var cssUnique = process.env.npm_config_css_unique == '' ? false : true;
var className = cssUnique ? 'fz__[hash:base64:5]' : '[name]__[local]';
var preact = process.env.npm_config_preact_switch || false;
var alias = {};
if (preact) {
alias.react = 'preact-compat';
alias['react-dom'] = 'preact-compat';
}
var appPath = fs.realpathSync(process.cwd());
var publicPath =
(process.env.npm_config_public_path ||
'//js.zohostatic.com/support/zohodeskcomponent' +
'@' +
process.env.npm_package_version) + '/dist/';
module.exports = {
watch: watchMode === 'true',
entry: {
main: path.join(appPath, 'src', runHtml ? 'html.js' : 'index.js')
// vendor: ['react', 'react-dom']
},
output: {
path: path.resolve(appPath, folder || 'dist'),
filename: '[name].js',
library: process.argv[4] || process.env.npm_package_umdVar || 'Component',
libraryTarget: 'umd'
},
plugins: [
new CaseSensitivePathsPlugin(),
new webpack.DefinePlugin({
__TEST__: false,
__DEVELOPMENT__: false,
__DOCS__: isDocs ? true : false,
'process.env': {
NODE_ENV: JSON.stringify('production')
},
__SERVER__: false
}),
new webpack.optimize.UglifyJsPlugin({
compressor: {
warnings: false
}
})
],
module: {
rules: [
{
include: /\.json$/,
use: [
{
loader: 'json-loader'
}
]
},
{
test: /\.jsx|\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
[require.resolve('babel-preset-es2015'), { modules: false }],
require.resolve('babel-preset-react')
],
plugins: [
[
require.resolve('babel-plugin-transform-runtime'),
{
helpers: true,
polyfill: true,
regenerator: false,
moduleName: 'babel-runtime'
}
]
],
cacheDirectory: true
}
}
],
include: path.join(appPath, 'src')
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader?modules&localIdentName=' + className]
},
isDocs
? {
test: /\.docs\.jsx$|\.docs\.js$/,
use: require.resolve('../docsLoader.js'),
exclude: /node_modules/
}
: {},
{
test: /\.jpe?g$|\.gif$|\.png$/,
use: ['url-loader?limit=10000&name=./images/[name].[ext]']
},
{
test: /\.woff$|\.ttf$|\.eot$/,
use: ['url-loader?limit=10000&name=./fonts/[name].[ext]']
},
{
test: /\.svg$/,
use: ['url-loader?limit=1&name=./fonts/[name].[ext]']
},
{
test: /\.html$/,
use: {
loader: 'html-loader',
options: {
attrs: [':data-src'],
interpolate: 'require'
}
}
}
]
},
resolve: {
alias: alias,
modules: [
path.resolve(__dirname, '..', '..', 'node_modules'),
'node_modules'
]
},
resolveLoader: {
modules: [
path.resolve(__dirname, '..', '..', 'node_modules'),
'node_modules'
]
}
};