nobuilder-json
Version:
nobuilder
112 lines (104 loc) • 2.86 kB
JavaScript
const babelLoaderOpts = require("../lib/babelConfig");
const path = require("path");
const autoprefixer = require("autoprefixer");
const paths = require("./paths");
const mode = "production";
const root = process.cwd();
const { resolveApp } = paths;
const dist = path.join(root, "dist");
function getConfig(entryOuts) {
const basicConfig = {
mode,
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules|bower_components)/,
use: [
{
loader: require.resolve("babel-loader"),
options: babelLoaderOpts
}
]
},
{
test: /\.(tsx|ts)$/,
use: [{ loader: require.resolve("ts-loader") }]
},
{
test: /\.(sass|scss)$/,
use: [
require.resolve("style-loader"),
{
loader: require.resolve("css-loader"),
options: {
importLoaders: 1
}
},
{
loader: require.resolve("postcss-loader"),
options: {
ident: "postcss",
plugins: () => [
require("postcss-flexbugs-fixes"),
autoprefixer({
browsers: [
">1%",
"last 4 versions",
"Firefox ESR",
"not ie < 9" // React doesn't support IE8 anyway
],
flexbox: "no-2009"
})
]
}
},
require.resolve("fast-sass-loader")
]
},
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
},
externals: {
react: {
root: "React",
commonjs2: "react",
commonjs: "react",
amd: "react"
},
"react-dom": {
root: "ReactDOM",
commonjs2: "react-dom",
commonjs: "react-dom",
amd: "react-dom"
}
},
plugins: [
// ...
function() {
this.plugin("done", function(stats) {
if (stats.compilation.errors && stats.compilation.errors.length) {
console.log(stats.compilation.errors);
process.exit(1);
}
});
}
// ...
],
resolve: {
extensions: [".js", ".jsx", ".tsx"]
}
};
const config = entryOuts.map(entryOutItem => {
entryOutItem.entry = resolveApp(entryOutItem.entry);
if (entryOutItem.output.path) {
entryOutItem.output.path = path.resolve(dist, entryOutItem.output.path);
} else {
entryOutItem.output.path = dist;
}
entryOutItem.output.libraryTarget = "umd";
return Object.assign({}, entryOutItem, basicConfig);
});
return config;
}
module.exports = getConfig;