@omnia/tooling-vue
Version:
Used to bundle and serve manifests web component that build on Vue framework.
426 lines (424 loc) • 14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const $ = tslib_1.__importStar(require("../variables"));
const ExtractTextPlugin = require('mini-css-extract-plugin');
const fsExtra = require('fs-extra');
fsExtra.copySync('wwwroot/scripts/vue-class-component/vue-class-component.esm.custom.js', 'node_modules/vue-class-component/dist/vue-class-component.esm.js');
const extractCSS = new ExtractTextPlugin({
filename: "omnia.vendor.css",
});
var outDir = "wwwroot/scripts";
$.tooling.log('omnia shared vendor running...');
$.webpack({
mode: 'production',
devtool: false,
context: $.tooling.utils.root(""),
resolve: {
extensions: ['.js', '.css'],
alias: {
'axios$': 'axios/dist/axios.js',
},
},
optimization: {
minimize: false,
usedExports: false,
providedExports: true,
removeAvailableModules: false,
mangleExports: false,
concatenateModules: true,
},
entry: {
shared: [
"axios",
'broadcast-channel',
]
},
//target: ['webworker', 'web'],
module: {
rules: [
{
test: /\.css(\?|$)/,
use: [
{
loader: ExtractTextPlugin.loader,
options: {
publicPath: '../css'
}
},
'css-loader',
]
},
{
test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '../fonts/'
}
}]
}
]
},
output: {
path: $.path.join($.tooling.utils.root(""), outDir),
filename: 'omnia.[name].vendor.js',
library: {
name: 'omniaSharedVendor',
type: 'global',
}
},
plugins: [
new $.webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /ignore/),
extractCSS,
new $.omniaWebpackPlugins.NamedModulesPlugin(),
new $.omniaWebpackPlugins.ModifyContent([
//{
// pattern: /var omniaVendor;omniaVendor/i,
// replacement: "window['omniaVendor'] "
//},
{
pattern: /# sourceMappingURL=\s*(\S+)/g,
replacement: '# ignore'
},
{
pattern: /__webpack_module_cache__/g,
replacement: '__omnia_webpack_module_cache__'
}
]),
new $.webpack.DllPlugin({
path: $.path.resolve(__dirname, "../config/omnia.[name].vendor.manifest.json"),
name: 'omniaSharedVendor',
entryOnly: false
}),
new $.webpack.DefinePlugin({
process: { env: { NODE_ENV: JSON.stringify('production') } }
})
]
})
.run((err, stats) => {
if (err || stats.hasErrors()) {
//console.log(stats.toJson({
// assets: false,
// hash: true
//}))
$.tooling.log('Omnia shared vendor have error : \r\n', $.tooling.LogTypes.Error);
if (err) {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
}
else {
stats.toJson().errors.forEach(err => {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
});
}
}
else {
// generate omnia vendor metadata
var manifestPath = $.path.resolve(__dirname, "../config/omnia.shared.vendor.manifest.json");
var manifestJson = require(manifestPath);
manifestJson.content["./node_modules/webpack/buildin/module.js"] = undefined;
$.fs.writeFileSync(manifestPath, JSON.stringify(manifestJson));
$.tooling.log('omnia shared vendor generated');
}
});
$.tooling.log('omnia vendor running...');
$.webpack({
mode: 'production',
devtool: false,
context: $.tooling.utils.root(""),
resolve: {
extensions: ['.js', '.css'],
alias: {
'typestyle$': 'typestyle/lib.es2015/index.js',
'vue$': 'vue/dist/vue.esm.js',
'rope-sequence$': 'rope-sequence/dist/index.js',
'w3c-keyname$': $.path.resolve($.tooling.utils.root(""), 'node_modules/w3c-keyname/index.es.js'),
'orderedmap$': 'orderedmap/index.js',
"vue-tsx-support/enable-check": "./client/tooling/vue/tasks/materials/dummy-vue-tsx-support-enable-check.js"
},
},
optimization: {
minimize: false,
usedExports: false,
providedExports: true,
removeAvailableModules: false,
mangleExports: false,
concatenateModules: true,
},
module: {
rules: [
{
test: /\.css(\?|$)/,
use: [
{
loader: ExtractTextPlugin.loader,
options: {
publicPath: '../css'
}
},
'css-loader',
]
},
{
test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '../fonts/'
}
}]
}
]
},
entry: {
vendor: [
"tslib",
"vue",
"vue-class-component",
"vue-property-decorator",
"vue-tsx-support",
"vue-tsx-support/enable-check",
// "vue-tsx-support/lib/vca",
"@vue/babel-helper-vue-jsx-merge-props",
// "@vue/composition-api",
"typestyle",
"csx",
"zepto-webpack",
"mousetrap",
"mousetrap-global-bind",
"dayjs",
"dayjs/plugin/utc",
"dayjs/plugin/timezone",
'dayjs/plugin/duration',
'dayjs/plugin/relativeTime',
"dayjs/locale/da.js",
"dayjs/locale/de.js",
"dayjs/locale/et.js",
"dayjs/locale/fr.js",
"dayjs/locale/lt.js",
"dayjs/locale/lv.js",
"dayjs/locale/pl.js",
"dayjs/locale/sv.js",
"dayjs/locale/nb.js",
"dayjs/locale/fi.js",
"dayjs/locale/es.js",
"dayjs/locale/nl.js",
"./wwwroot/scripts/zepto.extras.js",
// "@material/material-color-utilities"
]
},
output: {
path: $.path.join($.tooling.utils.root(""), outDir),
filename: 'omnia.[name].js',
library: {
name: 'omniaVendor',
type: 'window',
}
},
plugins: [
new $.webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /ignore/),
extractCSS,
new $.omniaWebpackPlugins.NamedModulesPlugin(),
new $.omniaWebpackPlugins.ModifyContent([
{
pattern: /var omniaVendor;omniaVendor/i,
replacement: "window['omniaVendor'] "
},
{
pattern: /# sourceMappingURL=\s*(\S+)/g,
replacement: '# ignore'
},
{
pattern: /__webpack_module_cache__/g,
replacement: '__omnia_webpack_module_cache__'
},
{
pattern: "const key = `f${stringHash(pid)}`;",
replacement: `
// <<omnia custom>> support prefix displayname in styleflow
` + "const key = `f${stringHash(pid)}`;" +
` if (!styles.$displayName)
return key;
` + "return `${styles.$displayName}_${key}`;"
},
{
pattern: "function h(type, props, children) {",
replacement: `
// <<omnia custom>> to calling custom createElement from current instance
var fallbackCreateElement;
function customDefineComponentInstance(Ctor, options) {
if (options === void 0) { options = {}; }
var silent = Ctor.config.silent;
Ctor.config.silent = true;
var vm = new Ctor(options);
Ctor.config.silent = silent;
return vm;
}
function h(type, props, children) {
if (currentInstance){
return currentInstance.$createElement(type, props, children);
}
if (!fallbackCreateElement) {
fallbackCreateElement = customDefineComponentInstance(Vue).$createElement;
}
return fallbackCreateElement(type, props, children);
`
}
]),
new $.webpack.DllPlugin({
path: $.path.resolve(__dirname, "../config/omnia.[name].manifest.json"),
name: 'omniaVendor',
entryOnly: false
}),
new $.webpack.DefinePlugin({
process: { env: { NODE_ENV: JSON.stringify('production') } }
})
]
})
.run((err, stats) => {
if (err || stats.hasErrors()) {
//console.log(stats.toJson({
// assets: false,
// hash: true
//}))
$.tooling.log('Omnia vendor have error : \r\n', $.tooling.LogTypes.Error);
if (err) {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
}
else {
stats.toJson().errors.forEach(err => {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
});
}
}
else {
// generate omnia vendor metadata
var manifestPath = $.path.resolve(__dirname, "../config/omnia.vendor.manifest.json");
var manifestJson = require(manifestPath);
manifestJson.content["./node_modules/webpack/buildin/module.js"] = undefined;
$.fs.writeFileSync(manifestPath, JSON.stringify(manifestJson));
$.tooling.log('omnia vendor generated');
}
});
// bundle omnia worker vendor
$.tooling.log('omnia worker vendor running...');
$.webpack({
mode: 'production',
devtool: false,
context: $.tooling.utils.root(""),
entry: {
worker: [
'@microsoft/signalr',
]
},
resolve: {
extensions: ['.js', '.css'],
alias: {
'@microsoft/signalr': '@microsoft/signalr/dist/webworker/signalr.js'
},
},
optimization: {
minimize: false,
usedExports: false,
providedExports: true,
removeAvailableModules: false,
mangleExports: false,
concatenateModules: true,
},
module: {
noParse: (content) => {
if (content.indexOf("@microsoft\\signalr\\dist\\webworker\\signalr.js") > -1
|| content.indexOf("@microsoft/signalr/dist/webworker/signalr.js") > -1) {
return true;
}
return false;
},
rules: [
{
test: /\.css(\?|$)/,
use: [
{
loader: ExtractTextPlugin.loader,
options: {
publicPath: '../css'
}
},
'css-loader',
]
},
{
test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '../fonts/'
}
}]
}
]
},
target: ['webworker'],
output: {
path: $.path.join($.tooling.utils.root(""), outDir),
filename: 'omnia.[name].vendor.js',
library: {
name: 'omniaWorkerVendor',
type: 'global',
}
},
plugins: [
new $.webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /ignore/),
extractCSS,
new $.omniaWebpackPlugins.NamedModulesPlugin(),
new $.omniaWebpackPlugins.ModifyContent([
{
pattern: /var omniaWorkerVendor;omniaWorkerVendor/i,
replacement: "globalThis['omniaWorkerVendor'] "
},
{
pattern: /# sourceMappingURL=\s*(\S+)/g,
replacement: '# ignore'
},
{
pattern: /__webpack_module_cache__/g,
replacement: '__omnia_webpack_module_cache__'
}
]),
new $.webpack.DllPlugin({
path: $.path.resolve(__dirname, "../config/omnia.[name].vendor.manifest.json"),
name: 'omniaWorkerVendor',
entryOnly: false
}),
new $.webpack.DefinePlugin({
process: { env: { NODE_ENV: JSON.stringify('production') } }
})
]
})
.run((err, stats) => {
if (err || stats.hasErrors()) {
console.log(stats.toJson({
assets: false,
hash: true
}));
$.tooling.log('Omnia vendor have error : \r\n', $.tooling.LogTypes.Error);
if (err) {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
}
else {
stats.toJson().errors.forEach(err => {
$.tooling.log(err.stack || err, $.tooling.LogTypes.Error);
});
}
}
else {
// generate omnia vendor metadata
var manifestPath = $.path.resolve(__dirname, "../config/omnia.worker.vendor.manifest.json");
var manifestJson = require(manifestPath);
manifestJson.content["./node_modules/webpack/buildin/module.js"] = undefined;
$.fs.writeFileSync(manifestPath, JSON.stringify(manifestJson));
$.tooling.log('omnia worker vendor generated');
}
});
;