1
mirror of https://github.com/jakejarvis/hugo-extended.git synced 2025-04-28 05:40:30 -04:00

allow binaries in vendor folder to be cached

aka: don't delete binaries in node_modules folder, since they shouldn't change anyways (unless the package is also updated)
This commit is contained in:
Jake Jarvis 2020-02-18 17:40:51 -05:00
parent 434a6865cf
commit 6c87e415dc
Signed by: jake
GPG Key ID: 2B0C9CF251E69A39
10 changed files with 3588 additions and 129 deletions

View File

@ -5,8 +5,6 @@ root = true
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
charset = utf-8 charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

3
.gitattributes vendored
View File

@ -1 +1,2 @@
* text=auto # Set default behavior to automatically normalize line endings
* text=auto eol=lf

View File

@ -10,41 +10,28 @@ npm install hugo-extended --save-dev
yarn add hugo-extended --dev yarn add hugo-extended --dev
``` ```
`hugo-extended` defaults to the [extended version](https://gohugo.io/getting-started/installing/#linux) of Hugo on [supported platforms](https://github.com/gohugoio/hugo/releases), and falls back to vanilla Hugo automatically if unsupported. `hugo-extended` defaults to the [extended version](https://gohugo.io/troubleshooting/faq/#i-get-tocss--this-feature-is-not-available-in-your-current-hugo-version) of Hugo on [supported platforms](https://github.com/gohugoio/hugo/releases), and automatically falls back to vanilla Hugo if unsupported (mainly on 32-bit systems).
## Usage ## Usage
See the [Hugo Documentation](https://gohugo.io/documentation/) for additional functionality. The following examples simply refer to executing Hugo as a local Node dependency. See the [official Hugo docs](https://gohugo.io/documentation/) for guidance on actual Hugo usage.
### package.json ### via CLI / `package.json`:
```json ```json
{ {
"scripts": { "scripts": {
"build": "hugo", "build": "hugo",
"start": "hugo serve", "start": "hugo server --buildDrafts --buildFuture --port 1313"
"create": "hugo new"
} }
} }
``` ```
#### CLI:
```sh ```sh
$(npm bin)/hugo --help npm start
npm run create -- post/my-new-post.md
``` ```
or on Windows: ### via API:
```bat
for /f "delims=" %F in ('npm bin') do call "%F\hugo" help
npm run create -- post/my-new-post.md
```
---
### API
```js ```js
const { execFile } = require('child_process'); const { execFile } = require('child_process');

4
cli.js
View File

@ -5,7 +5,5 @@
const { spawn } = require('child_process'); const { spawn } = require('child_process');
const hugo = require('.'); const hugo = require('.');
const input = process.argv.slice(2); spawn(hugo, process.argv.slice(2), { stdio: 'inherit' })
spawn(hugo, input, { stdio: 'inherit' })
.on('exit', process.exit); .on('exit', process.exit);

View File

@ -1,3 +1,3 @@
'use strict'; 'use strict';
module.exports = require('./lib')(process.cwd()).path(); module.exports = require('./lib').path();

View File

@ -7,22 +7,17 @@ const { hugoVersion } = require('../package.json');
const baseUrl = `https://github.com/gohugoio/hugo/releases/download/v${hugoVersion}/`; const baseUrl = `https://github.com/gohugoio/hugo/releases/download/v${hugoVersion}/`;
// Default to extended Hugo, fall back to vanilla Hugo on unsupported platforms // Default to extended Hugo, fall back to vanilla Hugo on unsupported platforms
const hugoBin = new binWrapper() // eslint-disable-next-line new-cap
module.exports = new binWrapper()
.src(`${baseUrl}hugo_extended_${hugoVersion}_Linux-64bit.tar.gz`, 'linux', 'x64') .src(`${baseUrl}hugo_extended_${hugoVersion}_Linux-64bit.tar.gz`, 'linux', 'x64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_macOS-64bit.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_Windows-64bit.zip`, 'win32', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-32bit.tar.gz`, 'freebsd', 'x86')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-64bit.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-ARM.tar.gz`, 'freebsd', 'arm')
.src(`${baseUrl}hugo_${hugoVersion}_Linux-32bit.tar.gz`, 'linux', 'x86') .src(`${baseUrl}hugo_${hugoVersion}_Linux-32bit.tar.gz`, 'linux', 'x86')
.src(`${baseUrl}hugo_${hugoVersion}_Linux-ARM.tar.gz`, 'linux', 'arm') .src(`${baseUrl}hugo_${hugoVersion}_Linux-ARM.tar.gz`, 'linux', 'arm')
.src(`${baseUrl}hugo_extended_${hugoVersion}_macOS-64bit.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_macOS-32bit.tar.gz`, 'darwin', 'x86') .src(`${baseUrl}hugo_${hugoVersion}_macOS-32bit.tar.gz`, 'darwin', 'x86')
.src(`${baseUrl}hugo_extended_${hugoVersion}_Windows-64bit.zip`, 'win32', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_Windows-32bit.zip`, 'win32', 'x86') .src(`${baseUrl}hugo_${hugoVersion}_Windows-32bit.zip`, 'win32', 'x86')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-64bit.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-32bit.tar.gz`, 'freebsd', 'x86')
.src(`${baseUrl}hugo_${hugoVersion}_FreeBSD-ARM.tar.gz`, 'freebsd', 'arm')
.dest(path.join(__dirname, '../vendor')) .dest(path.join(__dirname, '../vendor'))
.use(process.platform === 'win32' ? 'hugo.exe' : 'hugo'); .use(process.platform === 'win32' ? 'hugo.exe' : 'hugo');
// TODO: download checksums.txt file and validate package integrity
module.exports = function () {
return hugoBin;
};

View File

@ -1,30 +1,9 @@
'use strict'; 'use strict';
const path = require('path');
const bin = require('.'); const bin = require('.');
function getProjectRoot() { bin.run(['version']).then(() => {
// `projectRoot` on postinstall could be INIT_CWD introduced in npm >= 5.4
// see: https://github.com/npm/npm/issues/16990
const initCwd = process.env.INIT_CWD;
if (initCwd)
return initCwd;
// Fallback of getting INIT_CWD
const cwd = process.cwd();
const paths = cwd.split(path.sep);
// If `process.cwd` ends with 'node_modules/*' then get the dependent root directory,
// otherwise return the `cwd` (ordinary it will be the postinstall process of hugo-bin itself).
if (paths.length > 1 && paths[paths.length - 2] === 'node_modules')
return path.resolve('../../', cwd);
return cwd;
}
bin(getProjectRoot()).run(['version'])
.then(() => {
console.log('✔ Hugo installed successfully!'); console.log('✔ Hugo installed successfully!');
}) }).catch(error => {
.catch(error => {
console.error('✖ ERROR: Hugo installation failed. :(\n', error); console.error('✖ ERROR: Hugo installation failed. :(\n', error);
}); });

3589
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,19 +26,16 @@
], ],
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"bin-wrapper": "^4.1.0", "bin-wrapper": "^4.1.0"
"rimraf": "^3.0.1"
}, },
"devDependencies": { "devDependencies": {
"bin-check": "^4.1.0", "bin-check": "^4.1.0",
"eslint": "^6.8.0", "mocha": "*",
"mocha": "^7.0.1" "xo": "*"
}, },
"scripts": { "scripts": {
"eslint": "eslint .", "postinstall": "node lib/install.js",
"mocha": "mocha", "test": "xo && mocha"
"test": "npm run eslint && npm run mocha",
"postinstall": "rimraf vendor && node lib/install"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -51,21 +48,15 @@
"bin": { "bin": {
"hugo": "cli.js" "hugo": "cli.js"
}, },
"eslintConfig": { "xo": {
"extends": "eslint:recommended", "envs": [
"env": { "es6",
"es6": true, "node"
"node": true
},
"rules": {
"prefer-destructuring": [
"error",
{
"object": true,
"array": false
}
], ],
"strict": "error" "space": true,
"rules": {
"object-curly-spacing": "off",
"promise/prefer-await-to-then": "warn"
} }
} }
} }

View File

@ -14,7 +14,10 @@ it('Hugo exists and runs?', () => {
// Print additional build environment variables if check successful // Print additional build environment variables if check successful
if (works) { if (works) {
execFile(hugoBin, ['env'], (error, stdout) => { execFile(hugoBin, ['env'], (error, stdout) => {
if (error) throw error; if (error) {
throw error;
}
console.log(stdout); console.log(stdout);
}); });
} }