baka is a dead stupid inliner / importer for scss files. Meaning after you run it, you'll end up with a single flattened scss file with little external dependencies.
npm install @joneff/baka --save-dev// compile
const baka = require('@joneff/baka');
const result = baka.compile('src/style.scss');
console.log(result.content);
// build
const baka = require('@joneff/baka');
baka.build('src/style.scss', 'dist/style.scss');
// build files
const baka = require('@joneff/baka');
baka.buildFiles('src/**/*.scss', { path: 'dist', filename: '[name].scss'});The api is modeled after sass js api with some inspiration from webpack.
function compile( file: string, options?: CompileOptions ) : CompileResult;Synchronously compiles file to inline its imports. If it succeeds it returns CompileResult, and if it fails it throws an Exception.
function build( file: string, outFile: string, options?: BuildOptions ) : void;Internally calls compile for file and if successful, writes the content of CompileResult result to outFile.
function buildFiles( fileOrGlob: string | string[], output: OutputOptions, options?: BuildOptions ) : void;Internally calls build for each glob result of fileOrGlob and if successful, writes the content of CompileResult result to a location determined by output.
Controls how files are loaded and output. There are a four types of options: CompileOptions and BuildOptions that are identical to SharedOption and OutputOptions. Not all matter all the time. Here are the most important ones:
type OutputOptions = {
path: string;
filename: string
};Instructs baka on how and where it should output the result of compilation. Similar to webpack output configuration, but only supports path and filename. Both are optional.
pathspecifies the output directory. Preferably a relative path, though absolute paths are accepted as well. Defaults topath.resolve(process.cwd(), 'dist').filenamespecifies the name of the output file. It supports the following template strings:[file],[path],[base],[name]and[ext]and they have the same meaning as with webpack. Defaults to[name]-flat[ext].
I am not really a fan of complex regex for simple tasks, like parsing @import. The following is valid syntax:
/**/ @import "file.css"; /**/ //Yet, baka will not match it. So you could say that there are intended bugs. Speaking of which, any framework that doesn't terminate @import statements with ; will not be flattened. That means all frameworks using indented syntax.
Sure.