Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
JonDum committed Jan 9, 2015
1 parent 19d8b11 commit 089f700
Showing 1 changed file with 91 additions and 1 deletion.
92 changes: 91 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,94 @@
# polymer-loader
Loads polymer-elements as first-class bundles

Loads polymer-elements as first-class bundles. Allows you to separate components into a .js file, a .html file containg the `<polymer-element>` and a CSS file. Polymer-loader can be configured to use your choice of HTML/CSS preprocessor (Jade, EBS, Stylus, LESS, SASS, etc.).

## Usage

I suggest putting your components in their own directory, say `/components`

```
▾ components/
▾ foo/
foo.html
foo.js
foo.styl
▸ somethingElse/
▾ types/
▾ chart/
chart.html
chart.js
chart.styl
```

Where each component consists of the 3 parts of a webcomponent. Your `Polymer('foo', {})` registration would go in the .js file.

Now you will need to add a `preLoaders` entry to your `module` section in your `webpack.config.js`

```
module: {
loaders: [
....
],
preLoaders: [
{test: /\/components\/.+\.js$/, loader: 'polymer-loader?templateExtension=html&styleExtension=styl'}
]
}
```

Change `templateExtension` & `styleExtension` to desired filetypes (don't forget to have the correct `loader` config for that extension!)


Finally, whenever/wherever you want to `require()` this module in your bundle or chunk, just call `require('../components/foo/foo.js')` (remember it's relative to the file you require from).

#### Goodies

** Extensionless, absolute require **

Here's a little function that generates aliases for the files in your `/components` directory, allowing you to require components like `require('components/foo')` and `require('components/foo/type/bar')` from any file in your application (without having ot have every component's .js file named `index.js`).

```
alias: (function() {
var o = {}, root = __dirname + '/components/';
function parse(nodes, parent) {
if(parent && nodes.indexOf(path.basename(parent) + '.js') > -1)
o['components/'+parent] = __dirname + '/components/' + parent + '/' + path.basename(parent) + '.js';
else
nodes.forEach(function(node) {
var path = root+(parent ? parent+'/' : '')+node;
if(fs.statSync(path).isDirectory())
parse(fs.readdirSync(path), (parent ? parent+'/' : '')+node);
});
}
parse(fs.readdirSync(root));
return o;
})()
```


**Stylus Imports**

`Stylus-loader` is nice enough to resolve `@imports` for us, so as long as you have your css/style directory listed in `modulesDirectories` you can add import common variable/helper stylus files into your component's `<style>` tag.

```
modulesDirectories: ["node_modules", "bower_components", "css", "js"],
```

```
@import ~variables
@import ~themes
@import ~utils
foo
$bar
fooTheme()
```




More to come

0 comments on commit 089f700

Please sign in to comment.