A craco plugin for automatic aliases generation for Webpack and Jest.
-
Install craco
-
Install
craco-alias
:npm i -D craco-alias
-
Edit
craco.config.js
:const CracoAlias = require("craco-alias"); module.exports = { plugins: [ { plugin: CracoAlias, options: { // see in examples section } } ] };
-
Go to Examples section
-
source
:
One of"options"
,"jsconfig"
,"tsconfig"
Defaults to"options"
-
baseUrl
:
A base url for aliases. (./src
for example)
Defaults to./
(project root directory) -
aliases
:
An object with aliases names and paths
Defaults to{}
-
tsConfigPath
:
A path to tsconfig file
Only required whensource
is set to"tsconfig"
-
debug
:
Enable it if you ran into a problem. It will log a useful info in console.
Defaults tofalse
Specify aliases manually (source: "options")
Note: you don't need to add
/*
part for directories in this case
/* craco.config.js */
const CracoAlias = require("craco-alias");
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: "options",
baseUrl: "./",
aliases: {
"@file": "./src/file.js",
"@dir": "./src/some/dir",
// you can alias packages too
"@material-ui": "./node_modules/@material-ui-ie10"
}
}
}
]
};
Use aliases from jsconfig.json (source: "jsconfig")
/* craco.config.js */
const CracoAlias = require("craco-alias");
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: "jsconfig",
// baseUrl SHOULD be specified
// plugin does not take it from jsconfig
baseUrl: "./src"
}
}
]
};
Note: your jsconfig should always have
compilerOptions.paths
property.baseUrl
is optional for plugin, but some IDEs and editors require it for intellisense.
/* jsconfig.json */
{
compilerOptions: {
baseUrl: "src",
paths: {
"@file": ["file.js"],
"@dir/*": ["dir/*", "dir"]
}
}
}
Use aliases from tsconfig.json (source: "tsconfig")
-
Go to project's root directory.
-
Create
tsconfig.extend.json
. -
Edit it as follows:
{ "compilerOptions": { // baseUrl is optional for plugin, but some IDEs require it "baseUrl": "src", "paths": { "@file-alias": ["./your/file.tsx"], "@folder-alias/*": ["./very/long/path/*", "./very/long/path/"] } } }
-
Go to
tsconfig.json
. -
Extend
tsconfig.json
fromtsconfig.extend.json
:{ + "extends": "./tsconfig.extend.json", "compilerOptions": { ... }, ... }
-
Edit
craco.config.js
:const CracoAlias = require("craco-alias"); module.exports = { plugins: [ { plugin: CracoAlias, options: { source: "tsconfig", // baseUrl SHOULD be specified // plugin does not take it from tsconfig baseUrl: "./src", // tsConfigPath should point to the file where "baseUrl" and "paths" are specified tsConfigPath: "./tsconfig.extend.json" } } ] };