jekyll-postcss 0.2.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +2 -0
- data/.tool-versions +1 -1
- data/CHANGELOG.md +37 -0
- data/README.md +57 -6
- data/bin/command +36 -0
- data/bin/postcss +50 -0
- data/bin/release +3 -0
- data/bin/spec +3 -0
- data/jekyll-postcss.gemspec +1 -1
- data/lib/jekyll-postcss/socket.rb +75 -0
- data/lib/jekyll-postcss/version.rb +1 -1
- data/lib/jekyll/converters/postcss.rb +9 -12
- data/package.json +10 -0
- data/yarn.lock +8 -0
- metadata +15 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cba7273f4532e27ab92106857418dc0263b353e5bf82de0f6b01ab7a9f0672c3
|
4
|
+
data.tar.gz: d4f38cf3b58e9d5a5f84425b19795a99c586eb5a7a65e3f17c24edad9bda81af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c33fa3a5cbaa238644fe013dbe4f8c0dc7773c4c77993b193c08f130b00b2fd2917997ab83416e88eb169b9464a621ef1011567c60b7b33a8913f63723d20bc
|
7
|
+
data.tar.gz: 30238af1504ce3ec730a22bd9dd02a0e01ef2550467d4b4d78a21e10663b9b9f61cc1cc1f528819586cad62a11d999cbae244a08d71115aca1c70808584f50b6
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
github: mhanberg
|
data/.gitignore
CHANGED
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 2.
|
1
|
+
ruby 2.7.2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,42 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.4.1
|
4
|
+
|
5
|
+
- Fix a weird issue where the jekyll server never booted up because the converter class got in an infinite loop trying to make a socket connection to the postcss server.
|
6
|
+
|
7
|
+
## 0.4.0
|
8
|
+
|
9
|
+
### Process SCSS/Sass files
|
10
|
+
|
11
|
+
The plugin now processes scss and sass files in addition to css files. This requires using the [postcss-scss](https://github.com/postcss/postcss-scss) syntax parser in your postcss.config.js
|
12
|
+
|
13
|
+
```javascript
|
14
|
+
module.exports = {
|
15
|
+
parser: 'postcss-scss',
|
16
|
+
plugins: [
|
17
|
+
// ...
|
18
|
+
]
|
19
|
+
};
|
20
|
+
|
21
|
+
jekyll-postcss has a higher priority, so it will hand off the the postcss output to jekyll-sass-converter to finish off compiling.
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
## 0.3.2
|
26
|
+
|
27
|
+
- Output valid CSS when running outside the development environment
|
28
|
+
|
29
|
+
## 0.3.1
|
30
|
+
|
31
|
+
- Only run development server in development.
|
32
|
+
- This was discovered when attempting to deploy to Netlify. You can read more about it here [#8](https://github.com/mhanberg/jekyll-postcss/issues/8), [#15](https://github.com/mhanberg/jekyll-postcss/issues/15), and [here](https://community.netlify.com/t/deploy-is-hanging-postcss-problem/14822).
|
33
|
+
|
34
|
+
## 0.3.0
|
35
|
+
|
36
|
+
- Update rake
|
37
|
+
- Performance improvement
|
38
|
+
- [Breaking?]: Uses `postcss` instead of `postcss-cli`. I think that it will continue to work without changing your dependencies since `postcss-cli` uses `postcss` as a dependency.
|
39
|
+
|
3
40
|
## 0.2.2
|
4
41
|
|
5
42
|
- Use `Array.unshift` instead of `Array.prepend` to support older Ruby versions
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ Add this line to your application's Gemfile:
|
|
13
13
|
```ruby
|
14
14
|
gem 'jekyll-postcss'
|
15
15
|
```
|
16
|
+
|
16
17
|
And then add this line to your application's `_config.yml`:
|
17
18
|
|
18
19
|
```yml
|
@@ -24,26 +25,76 @@ plugins:
|
|
24
25
|
|
25
26
|
## Usage
|
26
27
|
|
27
|
-
Make sure you have [postcss
|
28
|
+
Make sure you have [postcss](https://github.com/postcss/postcss) installed.
|
28
29
|
|
29
30
|
Add your PostCSS plugins to a `postcss.config.js` file in the root of your repository.
|
30
31
|
|
31
32
|
```javascript
|
32
33
|
// postcss.config.js
|
33
34
|
|
34
|
-
module.exports {
|
35
|
+
module.exports = {
|
36
|
+
plugins: [
|
37
|
+
require("autoprefixer"), // example of plugin you might use
|
38
|
+
...(process.env.JEKYLL_ENV == "production" // example of only using a plugin in production
|
39
|
+
? [require("cssnano")({ preset: "default" })]
|
40
|
+
: [])
|
41
|
+
]
|
42
|
+
};
|
43
|
+
```
|
44
|
+
|
45
|
+
All CSS and SCSS/Sass files will now be processed by PostCSS.
|
46
|
+
|
47
|
+
### SCSS/Sass
|
48
|
+
|
49
|
+
If using SCSS/Sass, you must have [postcss-scss](https://github.com/postcss/postcss-scss) installed and configured in your `postcss.config.js`
|
50
|
+
|
51
|
+
```javascript
|
52
|
+
module.exports = {
|
53
|
+
parser: 'postcss-scss',
|
35
54
|
plugins: [
|
36
|
-
|
55
|
+
// ...
|
37
56
|
]
|
38
57
|
};
|
39
58
|
```
|
40
59
|
|
41
|
-
|
60
|
+
### Deployment
|
61
|
+
|
62
|
+
When deploying, make sure to set your `JEKYLL_ENV` to something like `production` or `staging`. This is necessary to make sure that jekyll-postcss will not use internal development conveniences when building on your host's servers.
|
42
63
|
|
64
|
+
This can be done so by setting your build command like so
|
43
65
|
|
44
|
-
|
66
|
+
```shell
|
67
|
+
JEKYLL_ENV=production bundle exec jekyll build
|
68
|
+
```
|
45
69
|
|
46
|
-
|
70
|
+
or using your hosts proprietary configuration. Here is an example using Netlify.
|
71
|
+
|
72
|
+
```toml
|
73
|
+
# netlify.toml
|
74
|
+
|
75
|
+
[context.production.environment]
|
76
|
+
JEKYLL_ENV = "production"
|
77
|
+
|
78
|
+
[context.branch-deploy.environment]
|
79
|
+
JEKYLL_ENV = "staging"
|
80
|
+
|
81
|
+
[context.deploy-preview.environment]
|
82
|
+
JEKYLL_ENV = "staging"
|
83
|
+
```
|
84
|
+
|
85
|
+
### Front Matter Reminder
|
86
|
+
|
87
|
+
Your stylesheets still need to have [front matter](https://jekyllrb.com/docs/step-by-step/03-front-matter/) for them to be processed by Jekyll.
|
88
|
+
|
89
|
+
```
|
90
|
+
---
|
91
|
+
---
|
92
|
+
|
93
|
+
/* Example using Tailwind */
|
94
|
+
@tailwind base;
|
95
|
+
@tailwind components;
|
96
|
+
@tailwind utilities;
|
97
|
+
```
|
47
98
|
|
48
99
|
## Development
|
49
100
|
|
data/bin/command
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
script_status="running"
|
4
|
+
|
5
|
+
# Start the program in the background
|
6
|
+
exec "$@" &
|
7
|
+
pid1=$!
|
8
|
+
|
9
|
+
shutdown(){
|
10
|
+
local pid1=$1
|
11
|
+
local pid2=$2
|
12
|
+
|
13
|
+
if [ $script_status = "running" ]; then
|
14
|
+
script_status="shutting down"
|
15
|
+
wait "$pid1"
|
16
|
+
ret=$?
|
17
|
+
kill -KILL "$pid2"
|
18
|
+
exit $ret
|
19
|
+
fi
|
20
|
+
}
|
21
|
+
|
22
|
+
# Silence warnings from here on
|
23
|
+
exec >/dev/null 2>&1
|
24
|
+
|
25
|
+
# Read from stdin in the background and
|
26
|
+
# kill running program when stdin closes
|
27
|
+
exec 0<&0 "$(
|
28
|
+
while read -r; do :; done
|
29
|
+
kill -KILL "$pid1"
|
30
|
+
)" &
|
31
|
+
pid2=$!
|
32
|
+
|
33
|
+
# Clean up
|
34
|
+
trap 'shutdown $pid1 $pid2' INT HUP TERM
|
35
|
+
shutdown "$pid1" "$pid2"
|
36
|
+
|
data/bin/postcss
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
const postcss = require(require.resolve("postcss", { paths: [process.cwd()] }));
|
4
|
+
const config = require(`${process.cwd()}/postcss.config.js`);
|
5
|
+
const net = require("net");
|
6
|
+
|
7
|
+
class PostCSS {
|
8
|
+
static process(data, write) {
|
9
|
+
postcss(config.plugins)
|
10
|
+
.process(JSON.parse(data).raw_content, { from: "stdin" })
|
11
|
+
.then((result) => write(result))
|
12
|
+
.catch((error) => {
|
13
|
+
console.error("PostCSS Error!\n");
|
14
|
+
console.error(error.toString());
|
15
|
+
});
|
16
|
+
}
|
17
|
+
|
18
|
+
static startServer() {
|
19
|
+
const server = net.createServer((c) => {
|
20
|
+
c.on("data", (data) => {
|
21
|
+
this.process(data, function (result) {
|
22
|
+
const packet = { compiled_css: result.toString() };
|
23
|
+
|
24
|
+
c.write(`${JSON.stringify(packet)}\n`);
|
25
|
+
});
|
26
|
+
});
|
27
|
+
});
|
28
|
+
|
29
|
+
server.on("error", (err) => {
|
30
|
+
console.error("PostCSS Server Error!\n");
|
31
|
+
throw err;
|
32
|
+
});
|
33
|
+
|
34
|
+
server.listen(8124, () => {
|
35
|
+
console.log("PostCSS Server listening on port 8124...");
|
36
|
+
});
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
switch (process.argv[2]) {
|
41
|
+
case "--development":
|
42
|
+
PostCSS.startServer();
|
43
|
+
break;
|
44
|
+
default:
|
45
|
+
PostCSS.process(process.argv[2], function (result) {
|
46
|
+
const packet = { compiled_css: result.toString() };
|
47
|
+
|
48
|
+
process.stdout.write(`${JSON.stringify(packet)}`);
|
49
|
+
});
|
50
|
+
}
|
data/bin/release
ADDED
data/bin/spec
ADDED
data/jekyll-postcss.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
|
32
32
|
spec.add_development_dependency "bundler", "~> 1.17"
|
33
33
|
spec.add_development_dependency "jekyll",
|
34
34
|
ENV["JEKYLL_VERSION"] ? "~> #{ENV["JEKYLL_VERSION"]}" : ">= 2.0"
|
35
|
-
spec.add_development_dependency "rake", "
|
35
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
36
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
37
37
|
spec.add_development_dependency "rubocop-jekyll", "~> 0.5.1"
|
38
38
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "socket"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
module PostCss
|
7
|
+
class Socket
|
8
|
+
class PostCssRuntimeError; end
|
9
|
+
START_SCRIPT = File.expand_path("../../bin/command", __dir__)
|
10
|
+
POSTCSS_SCRIPT = File.expand_path("../../bin/postcss", __dir__)
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
start_dev_server if development?
|
14
|
+
end
|
15
|
+
|
16
|
+
def write(data)
|
17
|
+
if development?
|
18
|
+
@postcss.puts encode(data)
|
19
|
+
else
|
20
|
+
@compiled_css = `#{POSTCSS_SCRIPT} '#{encode(data)}'`
|
21
|
+
end
|
22
|
+
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def read
|
27
|
+
if development?
|
28
|
+
decode(@postcss.gets.chomp)
|
29
|
+
else
|
30
|
+
raise "You must call PostCss#write before calling PostCss#read" if @compiled_css.nil?
|
31
|
+
|
32
|
+
decode(@compiled_css)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def encode(data)
|
39
|
+
JSON.dump(:raw_content => data)
|
40
|
+
end
|
41
|
+
|
42
|
+
def decode(data)
|
43
|
+
JSON.parse(data)["compiled_css"]
|
44
|
+
end
|
45
|
+
|
46
|
+
def development?
|
47
|
+
@env ||= Jekyll.env
|
48
|
+
|
49
|
+
@env == "development"
|
50
|
+
end
|
51
|
+
|
52
|
+
MAX_ATTEMPTS = 100
|
53
|
+
|
54
|
+
def start_dev_server
|
55
|
+
Thread.new do
|
56
|
+
system "#{START_SCRIPT} #{POSTCSS_SCRIPT} --development"
|
57
|
+
end
|
58
|
+
|
59
|
+
attempts = 0
|
60
|
+
@postcss =
|
61
|
+
begin
|
62
|
+
TCPSocket.open("localhost", 8124)
|
63
|
+
rescue StandardError => e
|
64
|
+
attempts = attempts + 1
|
65
|
+
|
66
|
+
if attempts < MAX_ATTEMPTS
|
67
|
+
sleep 0.1
|
68
|
+
retry
|
69
|
+
else
|
70
|
+
raise "Could not connect to the PostCSS server"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -1,32 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "open3"
|
4
3
|
require "digest"
|
4
|
+
require_relative "../../jekyll-postcss/socket"
|
5
5
|
|
6
6
|
module Jekyll
|
7
7
|
module Converters
|
8
8
|
class PostCss < Converter
|
9
9
|
safe true
|
10
|
-
priority :
|
10
|
+
priority :normal
|
11
11
|
|
12
12
|
def initialize(config = {})
|
13
13
|
super
|
14
14
|
|
15
|
+
@socket = config.fetch("socket") { ::PostCss::Socket.new }
|
15
16
|
@raw_cache = nil
|
16
17
|
@import_raw_cache = {}
|
17
18
|
@converted_cache = nil
|
18
19
|
end
|
19
20
|
|
20
21
|
def matches(ext)
|
21
|
-
|
22
|
+
[".css", ".scss", ".sass"].include?(ext.downcase)
|
22
23
|
end
|
23
24
|
|
24
|
-
def output_ext(
|
25
|
-
|
25
|
+
def output_ext(ext)
|
26
|
+
ext
|
26
27
|
end
|
27
28
|
|
28
29
|
def convert(content)
|
29
|
-
raise PostCssNotFoundError unless
|
30
|
+
raise PostCssNotFoundError unless Dir.exist?("./node_modules/postcss")
|
30
31
|
|
31
32
|
@raw_digest = Digest::MD5.hexdigest content
|
32
33
|
@raw_import_digests = import_digests(content)
|
@@ -35,12 +36,9 @@ module Jekyll
|
|
35
36
|
@raw_cache = @raw_digest.dup
|
36
37
|
@import_raw_cache = @raw_import_digests.dup
|
37
38
|
|
38
|
-
|
39
|
-
Open3.capture2("./node_modules/.bin/postcss", :stdin_data => content)
|
39
|
+
@socket.write content
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
@converted_cache = compiled_css
|
41
|
+
@converted_cache = @socket.read
|
44
42
|
end
|
45
43
|
|
46
44
|
reset
|
@@ -75,4 +73,3 @@ module Jekyll
|
|
75
73
|
end
|
76
74
|
|
77
75
|
class PostCssNotFoundError < RuntimeError; end
|
78
|
-
class PostCssRuntimeError < RuntimeError; end
|
data/package.json
ADDED
data/yarn.lock
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
prettier@^2.0.5:
|
6
|
+
version "2.0.5"
|
7
|
+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
|
8
|
+
integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-postcss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitchell Hanberg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 12.3.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 12.3.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +87,7 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- ".github/FUNDING.yml"
|
90
91
|
- ".gitignore"
|
91
92
|
- ".rspec"
|
92
93
|
- ".rubocop.yml"
|
@@ -98,12 +99,19 @@ files:
|
|
98
99
|
- LICENSE.txt
|
99
100
|
- README.md
|
100
101
|
- Rakefile
|
102
|
+
- bin/command
|
101
103
|
- bin/console
|
104
|
+
- bin/postcss
|
105
|
+
- bin/release
|
102
106
|
- bin/setup
|
107
|
+
- bin/spec
|
103
108
|
- jekyll-postcss.gemspec
|
104
109
|
- lib/jekyll-postcss.rb
|
110
|
+
- lib/jekyll-postcss/socket.rb
|
105
111
|
- lib/jekyll-postcss/version.rb
|
106
112
|
- lib/jekyll/converters/postcss.rb
|
113
|
+
- package.json
|
114
|
+
- yarn.lock
|
107
115
|
homepage: https://github.com/mhanberg/jekyll-postcss
|
108
116
|
licenses:
|
109
117
|
- MIT
|
@@ -125,8 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
133
|
- !ruby/object:Gem::Version
|
126
134
|
version: '0'
|
127
135
|
requirements: []
|
128
|
-
|
129
|
-
rubygems_version: 2.7.6
|
136
|
+
rubygems_version: 3.1.4
|
130
137
|
signing_key:
|
131
138
|
specification_version: 4
|
132
139
|
summary: A PostCSS plugin for Jekyll.
|