diff --git a/README.md b/README.md index 3c5818e..7ba6700 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# laravel-mix-pug +# laravel-mix-pug-recursive Laravel Mix Plugin for compiling Pug/Jade templates.

@@ -9,24 +9,24 @@ Laravel Mix Plugin for compiling Pug/Jade templates. ## Introduction -This package provides a plugin for Laravel Mix to compile pug templates. `laravel-mix-pug` requires Laravel Mix to work. Please follow the instructions on how to use it on the package [repository](https://github.com/JeffreyWay/laravel-mix). +This package provides a plugin for Laravel Mix to compile pug templates. `laravel-mix-pug-recursive` requires Laravel Mix to work. Please follow the instructions on how to use it on the package [repository](https://github.com/JeffreyWay/laravel-mix). ## Usage Install this package into your project: ``` -npm install laravel-mix-pug --save-dev +npm install laravel-mix-pug-recursive --save-dev ``` Head over to your `webpack.mix.js` and register it on the Laravel Mix API: ```js let mix = require('laravel-mix'); -mix.pug = require('laravel-mix-pug'); +mix.pug = require('laravel-mix-pug-recursive'); mix.js('src/app.js', 'dist') .sass('src/app.scss', 'dist') - .pug('src/*.pug', 'dist') + .pug('src/**/*.pug', 'dist') .setPublicPath('dist'); ``` @@ -37,7 +37,7 @@ You can also pass in a third optional parameter: *options* object. It accepts tw This is a path to a folder with seed files. Files can be of type `json` or `yaml`. They will be parsed and provided in your pug template locals under the seed file name and then contents. ```js -mix.pug('src/*.pug', 'dist', {seeds:'src/seeds'}); +mix.pug('src/**/*.pug', 'dist', {seeds:'src/seeds'}); ``` And if you have a file `demo.yml` in there all the content will be available in your template under @@ -50,7 +50,7 @@ a(href=seed.demo.anchor.link) seed.demo.anchor.name It's possible to pass in an object which will be added to locals in your pug templates: ```js -mix.pug('src/*.pug', 'dist', { +mix.pug('src/**/*.pug', 'dist', { locals: { config: { baseUrl: 'http://my-template.dev/' } } @@ -68,7 +68,7 @@ script(src=`{config.baseUrl}js/main.js`) You can pass in [pug config options](https://pugjs.org/api/reference.html#options) under `pug` key: ```js -mix.pug('src/*.pug', 'dist', { +mix.pug('src/**/*.pug', 'dist', { pug: { pretty: true, debug: true @@ -81,7 +81,7 @@ It is possible to change to output file extension and exclude part of the path. i.e.: You want your destination file to be in `resources/assets/views` and the folder structure in there to continue from the `resources/assets/pug/{..}`: ```js -mix.pug('resources/assets/pug/*.pug', 'resources/assets/views', { +mix.pug('resources/assets/pug/**/*.pug', 'resources/assets/views', { ext: '.blade.php', excludePath: 'resources/assets/pug' }); diff --git a/package.json b/package.json index e6a37b6..2094ecc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "laravel-mix-pug", - "version": "0.3.0", + "name": "laravel-mix-pug-recursive", + "version": "0.3.6", "description": "Laravel Mix Plugin for compiling Pug/Jade templates.", "main": "src/index.js", "scripts": { @@ -8,7 +8,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/matejsvajger/laravel-mix-pug.git" + "url": "git+https://github.com/mikemartin/laravel-mix-pug-recursive.git" }, "keywords": [ "laravel", @@ -18,15 +18,16 @@ "author": "Matej Svajger ", "license": "MIT", "bugs": { - "url": "https://github.com/matejsvajger/laravel-mix-pug/issues" + "url": "https://github.com/mikemartin/laravel-mix-pug-recursive/issues" }, - "homepage": "https://github.com/matejsvajger/laravel-mix-pug#readme", + "homepage": "https://github.com/mikemartin/laravel-mix-pug-recursive#readme", "dependencies": { "foldero": "^0.1.1", "glob": "^7.1.2", - "js-yaml": "^3.9.1" + "js-yaml": "^3.9.1", + "mkdirp": "^0.5.1" }, "peerDependencies": { - "laravel-mix": "^1.4.2 || 2.x || 3.x || 4.x" + "laravel-mix": "^1.4.2 || 2.x || 3.x || 4.x || 5.x || 6.x" } } diff --git a/src/MixPugTask.js b/src/MixPugTask.js index 6940e4e..6d8475e 100644 --- a/src/MixPugTask.js +++ b/src/MixPugTask.js @@ -8,6 +8,7 @@ const glob = require('glob'); const path = require('path'); const pug = require('pug'); const fs = require('fs'); +const mkdirp = require('mkdirp'); class MixPugTask extends Task { @@ -164,10 +165,10 @@ class MixPugTask extends Task { prepareAssets(src) { let file = new File(src); let pathFromBase = this.relativePathFromSource(file.base(), this.excludePath); - let baseDir = path.join(pathFromBase, this.dest); - + let baseDir = (new File(path.join(this.dest, pathFromBase))).absolutePath; + if (!File.exists(baseDir)) { - new File(baseDir).makeDirectories(); + mkdirp.sync(baseDir); } let output = path.join(baseDir, file.nameWithoutExtension() + this.extension); diff --git a/src/PugSeeder.js b/src/PugSeeder.js index 411424e..3b0ba47 100644 --- a/src/PugSeeder.js +++ b/src/PugSeeder.js @@ -3,6 +3,7 @@ const _ = require('lodash'); const glob = require('glob'); const yaml = require('js-yaml'); const foldero = require('foldero'); +const { extname } = require('path'); class PugSeeder { @@ -41,7 +42,7 @@ class PugSeeder { let json = {}; try { - json = (path.extname(file).match(/^.ya?ml$/)) ? + json = (extname(file).match(/^.ya?ml$/)) ? yaml.safeLoad(fs.readFileSync(file, 'utf8')): JSON.parse(fs.readFileSync(file, 'utf8')); } catch(e) { @@ -73,4 +74,4 @@ class PugSeeder { } -module.exports = PugSeeder; \ No newline at end of file +module.exports = PugSeeder; diff --git a/src/index.js b/src/index.js index 0474eba..a4c1233 100644 --- a/src/index.js +++ b/src/index.js @@ -1,20 +1,21 @@ -let Verify, Assert; +let Verify, Dependencies; // laravel-mix@1.x try { Verify = require('laravel-mix/src/Verify'); } // laravel-mix@>=2.x -catch (e) { Assert = require('laravel-mix/src/Assert'); } +catch (e) { Dependencies = require('laravel-mix/src/Dependencies'); } const notifier = require('node-notifier'); const glob = require('glob'); -function pug(src, dest, options) { +function pug(src, dest, options = {}) { // laravel-mix@1.x if (Verify != null) Verify.dependency('pug', ['pug'], true); // laravel-mix@>=2.x - else Assert.dependencies(['pug'], true); + else new Dependencies(['pug']).install(true); - let files = glob.sync(src); + let globOption = options.glob ? options.glob : {} + let files = glob.sync(src, globOption); let MixPugTask = require('./MixPugTask');