webpack-resolve-short-path-plugin
v1.0.4
Published
A plugin for enhanced-resolve (Webpack v2) that resolves paths like ~module to %rootPath%/module so you don't have to write relative paths like ../../../module.
Downloads
52
Maintainers
Readme
webpack-resolve-short-path-plugin
A plugin for enhanced-resolve
(Webpack v2) that resolves paths like ~module
to %rootPath%/module
so you don't have
to write relative paths like ../../../module
.
Installation
npm install --save-dev webpack-resolve-short-path-plugin
Usage
var path = require('path');
var ResolveShortPathPlugin = require('webpack-resolve-short-path-plugin');
module.exports = {
// ...
resolve: {
plugins: [
new ResolveShortPathPlugin({rootPath: path.join(__dirname, 'src')})
]
},
// ...
};
Example:
actions/sendForm.js
export default function(recipient, subject, message) {};
components/ContactPage/ContactPage.jsx
import sendForm from '~actions/sendForm'; //resolves to `../../actions/sendForm`
Why
Why use short paths?
In deeply nested directory structures, using relative paths to require modules above the current module directory can be tricky:
- you have to know the right number of
..
s to use - if you ever move the current module you'll need to update the number of
..
s
Why use ~module
?
I wanted a short prefix to save typing.
That rules out
<package-name>/module
because forcing developers to change their package name in order to achieve a shorter path is lame, and package names may already be used for other purposes.
I didn't want it to clash with the possible namespace of npm packages.
That rules out
app/module
,src/module
,@app/module
,@src/module
etc becauseapp
,src
,@app/module
and@src/module
are all valid npm package names.
I didn't want it to clash with existing operating system conventions (so it can be reused when bundling applications for NodeJS).
That rules out
~/
and/
.
Why not use resolve.alias
es or resolve.modules
?
Using resolve.alias
requires manual setup for every directory in your rootPath
directory and results in confusion when resolve.alias
es
have been setup for some directories but not all of them.
Using resolve.module
clashes with the possible namespace of npm packages and results in confusion over whether the imported
module is a npm package in node_modules
or is a local module in your rootPath
directory.
Change log
1.0.4
Change peerDeps
to only require beta 21
1.0.3
Fix wording in doco.
1.0.2
Replace <rootPath>
in package.json
description
so npmjs.com
doesn't display nothing.
1.0.1
Remove backticks from package.json
description
so npmjs.com
doesn't display <code>
1.0.0
Initial release.