Skip to content

Instantly share code, notes, and snippets.

@kisenka
kisenka / inmemory-webpack-compiler.js
Last active April 15, 2023 15:09
Webpack in-memory filesystem
var webpack = require('webpack');
var MemoryFS = require('memory-fs');
var SingleEntryDependency = require('webpack/lib/dependencies/SingleEntryDependency');
var fs = new MemoryFS();
fs.mkdirpSync('/src');
fs.writeFileSync('/src/app.js', 'require("./dep.js")', 'utf-8');
fs.writeFileSync('/src/dep.js', 'module.exports = function(msg){console.log(msg)}', 'utf-8');
fs.writeFileSync('/src/extra-entry.js', 'require("./dep.js")', 'utf-8');
@kisenka
kisenka / getAssetsByChunkNames.js
Last active November 30, 2021 22:37
Extract assets from Webpack compilation
/**
* @param {Compilation} compilation Webpack compilation
* @returns {{
* byChunkName: {chunkName: Array<{name: string, source: string}>},
* extra: Array<{name: string, source: string}>
* }}
*/
var getAssets = function (compilation) {
var EXTRA_ASSETS_CHUNK_NAME = '__extra_assets__';
var stats = compilation.getStats().toJson();
@kisenka
kisenka / transformer.js
Created April 19, 2018 19:29
TypeScript transformer to rename imports (like babel-plugin-import-rename)
const ts = require('typescript');
const IMPORT_RE = /(.*)\.pcss$/;
const REPLACE_TO = '$1.css';
module.exports = function () {
return function (context) {
function visitor(node) {
const isImport = ts.isImportDeclaration(node);
const moduleName = isImport && node.moduleSpecifier ? node.moduleSpecifier.text : null;
const fs = require('fs');
const { promisify } = require('util');
const compareImages = promisify(require('looks-same'));
const createDiffImage = promisify(require('looks-same').createDiff);
const resembleCompareImages = require('resemblejs/compareImages');
const sharp = require('sharp');
const spriteSize = {
width: 610.6,
height: 248.5
};
const symbolSize = {
width: 610.6,
height: 108.5
};
module.exports = (wallaby) => {
const config = {
files: [
{ pattern: 'lib/*.js' },
{ pattern: 'lib/**/*.js' },
{ pattern: 'test/tests-*.js', instrument: false }
],
tests: [
{ pattern: 'test/*.test.js' }
@kisenka
kisenka / server.js
Created April 6, 2017 12:00
JSON server mock
const express = require('express');
const data = require('./server-data.json');
const server = express();
const responseHeaders = {
'Content-Type': 'application/javascript',
'Access-Control-Allow-Origin': '*'
};
server.get('/products/releases', (req, res) => {
@kisenka
kisenka / app.js
Last active February 16, 2017 16:37
HotModuleReplacementPlugin doesn't generate hot update assets if it applies in child compilation
require('./styles.css');
@kisenka
kisenka / plugin.js
Created October 12, 2016 22:05
Prevent Webpack to emit asset in compilation.assets
compiler.plugin('compilation', function(compilation) {
compilation.plugin('chunk-asset', function (chunk, filename) {
// chunk.name can be useful, usually it's name of entrypoint
delete this.assets[filename];
});
});
@kisenka
kisenka / webpack.config.js
Created July 6, 2016 21:24
Webpack dev server build info show only errors
devServer: {
// It suppress error shown in console, so it has to be set to false.
quiet: false,
// It suppress everything except error, so it has to be set to false as well
// to see success build.
noInfo: false,
stats: {
// Config for minimal console.log mess.
assets: false,