Skip to content

Commit 59fb0e9

Browse files
Daniel Spitzeregoist
authored andcommitted
Use generateBundle instead of onwrite (#148)
@egoist @lmihaidaniel Fixes #147 The `onwrite` rollup hook has been deprecated in favor of `generateBundle` in `rollup@1.x.x`. rollup/rollup#2409
1 parent b756821 commit 59fb0e9

4 files changed

Lines changed: 326 additions & 239 deletions

File tree

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@
3333
"babel-preset-env": "^1.5.1",
3434
"bili": "^3.0.1",
3535
"eslint-config-rem": "^4.0.0",
36+
"fs-extra": "^7.0.1",
3637
"jest": "^22.0.4",
3738
"less": "^2.7.3",
3839
"node-sass": "^4.7.2",
39-
"rollup": "^0.57.1",
40+
"rollup": "^1.1.2",
4041
"stylus": "^0.54.5",
4142
"sugarss": "^1.0.1",
4243
"xo": "^0.18.2"
@@ -45,7 +46,6 @@
4546
"chalk": "^2.0.0",
4647
"concat-with-sourcemaps": "^1.0.5",
4748
"cssnano": "^4.1.5",
48-
"fs-extra": "^5.0.0",
4949
"import-cwd": "^2.1.0",
5050
"p-queue": "^2.4.2",
5151
"pify": "^3.0.0",
@@ -79,4 +79,4 @@
7979
]
8080
]
8181
}
82-
}
82+
}

src/index.js

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import path from 'path'
2-
import fs from 'fs-extra'
32
import { createFilter } from 'rollup-pluginutils'
43
import Concat from 'concat-with-sourcemaps'
54
import Loaders from './loaders'
6-
import humanlizePath from './utils/humanlize-path'
75

86
/**
97
* The options that could be `boolean` or `object`
@@ -86,29 +84,29 @@ export default (options = {}) => {
8684
}
8785
},
8886

89-
async onwrite(opts) {
87+
async generateBundle(opts, bundle) {
9088
if (extracted.size === 0) return
91-
const dirnameMain = path.dirname(opts.file)
92-
93-
const getExtracted = filepath => {
94-
if (!filepath) {
95-
if (typeof postcssLoaderOptions.extract === 'string') {
96-
filepath = postcssLoaderOptions.extract
97-
} else {
98-
const basename = path.basename(opts.file, path.extname(opts.file))
99-
filepath = path.join(dirnameMain, basename + '.css')
100-
}
89+
90+
const dir = opts.dir || path.dirname(opts.file)
91+
const getExtracted = () => {
92+
const fileName =
93+
typeof postcssLoaderOptions.extract === 'string' ?
94+
path.relative(dir, postcssLoaderOptions.extract) :
95+
`${path.basename(opts.file, path.extname(opts.file))}.css`
96+
const concat = new Concat(true, fileName, '\n')
97+
const entries = Array.from(extracted.values())
98+
const { modules } = bundle[path.relative(dir, opts.file)]
99+
if (modules) {
100+
const fileList = Object.keys(modules)
101+
entries.sort((a, b) => (
102+
fileList.indexOf(a.id) - fileList.indexOf(b.id)
103+
))
101104
}
102-
filepath = humanlizePath(filepath)
103-
const concat = new Concat(true, filepath, '\n')
104-
for (const res of extracted.values()) {
105-
const relative = humanlizePath(res.id)
105+
for (const res of entries) {
106+
const relative = path.relative(dir, res.id)
106107
const map = res.map || null
107108
if (map) {
108-
map.file = filepath
109-
map.sources = map.sources.map(source =>
110-
source.substr(0, dirnameMain.length) === dirnameMain ? source : humanlizePath(path.join(dirnameMain, source))
111-
)
109+
map.file = fileName
112110
}
113111
concat.add(relative, res.code, map)
114112
}
@@ -120,14 +118,14 @@ export default (options = {}) => {
120118
'utf8'
121119
).toString('base64')}*/`
122120
} else if (sourceMap === true) {
123-
code += `\n/*# sourceMappingURL=${path.basename(filepath)}.map */`
121+
code += `\n/*# sourceMappingURL=${fileName}.map */`
124122
}
125123

126124
return {
127125
code,
128126
map: sourceMap === true && concat.sourceMap,
129-
codeFilePath: filepath,
130-
mapFilePath: filepath + '.map'
127+
codeFileName: fileName,
128+
mapFileName: fileName + '.map'
131129
}
132130
}
133131

@@ -138,15 +136,21 @@ export default (options = {}) => {
138136
}
139137
}
140138

141-
const { code, codeFilePath, map, mapFilePath } = getExtracted()
142-
await fs
143-
.ensureDir(path.dirname(codeFilePath))
144-
.then(() =>
145-
Promise.all([
146-
fs.writeFile(codeFilePath, code, 'utf8'),
147-
sourceMap === true && fs.writeFile(mapFilePath, map, 'utf8')
148-
])
149-
)
139+
const { code, codeFileName, map, mapFileName } = getExtracted()
140+
const codeFile = {
141+
fileName: codeFileName,
142+
isAsset: true,
143+
source: code
144+
}
145+
bundle[codeFile.fileName] = codeFile
146+
if (map) {
147+
const mapFile = {
148+
fileName: mapFileName,
149+
isAsset: true,
150+
source: map
151+
}
152+
bundle[mapFile.fileName] = mapFile
153+
}
150154
}
151155
}
152156
}

test/__snapshots__/index.test.js.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ body {
183183
color: red;
184184
}
185185
186-
/*# sourceMappingURL=extracted.css.map */"
186+
/*# sourceMappingURL=this/is/extracted.css.map */"
187187
`;
188188

189-
exports[`extract custom-path: css map 1`] = `"{\\"version\\":3,\\"sources\\":[\\"test/fixtures/dist/extract--custom-path/foo.css\\",\\"test/fixtures/dist/extract--custom-path/bar.css\\",\\"test/fixtures/dist/extract--custom-path/test/fixtures/simple/style.styl\\",\\"test/fixtures/dist/extract--custom-path/style.styl\\",\\"test/fixtures/dist/extract--custom-path/style.sass\\",\\"test/fixtures/dist/extract--custom-path/test/fixtures/simple/style.less\\",\\"test/fixtures/dist/extract--custom-path/style.less\\",\\"test/fixtures/dist/extract--custom-path/style.pcss\\"],\\"names\\":[],\\"mappings\\":\\"AAAA;EACE,WAAW;CACZ;;ACFD;EACE,WAAW;CACZ;;ACFD;EACE,YAAA;EACA,iBAAA;CCCD;AACD,0DAA0D;ACJ1D;EACE,WAAW;EACX,uBAAuB,EAAE;;ACC3B;EACE,eAAA;CCFD;;ACFD;EACE,WAAW;CACZ\\",\\"file\\":\\"test/fixtures/dist/extract--custom-path/this/is/extracted.css\\",\\"sourcesContent\\":[\\"body {\\\\n color: red;\\\\n}\\\\n\\",\\".bar {\\\\n color: red;\\\\n}\\\\n\\",null,null,\\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\",null,null,\\".pcss {\\\\n color: red;\\\\n}\\\\n\\"]}"`;
189+
exports[`extract custom-path: css map 1`] = `"{\\"version\\":3,\\"sources\\":[\\"foo.css\\",\\"bar.css\\",\\"test/fixtures/simple/style.styl\\",\\"style.styl\\",\\"style.sass\\",\\"test/fixtures/simple/style.less\\",\\"style.less\\",\\"style.pcss\\"],\\"names\\":[],\\"mappings\\":\\"AAAA;EACE,WAAW;CACZ;;ACFD;EACE,WAAW;CACZ;;ACFD;EACE,YAAA;EACA,iBAAA;CCCD;AACD,0DAA0D;ACJ1D;EACE,WAAW;EACX,uBAAuB,EAAE;;ACC3B;EACE,eAAA;CCFD;;ACFD;EACE,WAAW;CACZ\\",\\"file\\":\\"this/is/extracted.css\\",\\"sourcesContent\\":[\\"body {\\\\n color: red;\\\\n}\\\\n\\",\\".bar {\\\\n color: red;\\\\n}\\\\n\\",null,null,\\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\",null,null,\\".pcss {\\\\n color: red;\\\\n}\\\\n\\"]}"`;
190190

191191
exports[`extract custom-path: js code 1`] = `
192192
"'use strict';
@@ -222,7 +222,7 @@ body {
222222
color: red;
223223
}
224224
225-
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvZGlzdC9leHRyYWN0LS1zb3VyY2VtYXAtaW5saW5lL2Zvby5jc3MiLCJ0ZXN0L2ZpeHR1cmVzL2Rpc3QvZXh0cmFjdC0tc291cmNlbWFwLWlubGluZS9iYXIuY3NzIiwidGVzdC9maXh0dXJlcy9kaXN0L2V4dHJhY3QtLXNvdXJjZW1hcC1pbmxpbmUvdGVzdC9maXh0dXJlcy9zaW1wbGUvc3R5bGUuc3R5bCIsInRlc3QvZml4dHVyZXMvZGlzdC9leHRyYWN0LS1zb3VyY2VtYXAtaW5saW5lL3N0eWxlLnN0eWwiLCJ0ZXN0L2ZpeHR1cmVzL2Rpc3QvZXh0cmFjdC0tc291cmNlbWFwLWlubGluZS90ZXN0L2ZpeHR1cmVzL3NpbXBsZS9zdHlsZS5zYXNzIiwidGVzdC9maXh0dXJlcy9kaXN0L2V4dHJhY3QtLXNvdXJjZW1hcC1pbmxpbmUvc3R5bGUuc2FzcyIsInRlc3QvZml4dHVyZXMvZGlzdC9leHRyYWN0LS1zb3VyY2VtYXAtaW5saW5lL3Rlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLmxlc3MiLCJ0ZXN0L2ZpeHR1cmVzL2Rpc3QvZXh0cmFjdC0tc291cmNlbWFwLWlubGluZS9zdHlsZS5sZXNzIiwidGVzdC9maXh0dXJlcy9kaXN0L2V4dHJhY3QtLXNvdXJjZW1hcC1pbmxpbmUvc3R5bGUucGNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLFdBQVc7Q0FDWjs7QUNGRDtFQUNFLFdBQVc7Q0FDWjs7QUNGRDtFQUNFLFlBQUE7RUFDQSxpQkFBQTtDQ0NEO0FBQ0QsMERBQTBEO0FDSjFEO0VBQ0UsV0FBVTtFQUNWLHVCQUFzQixFQUFJOztBQ0U1Qix1Q0FBdUM7QUNEdkM7RUFDRSxlQUFBO0NDRkQ7O0FDRkQ7RUFDRSxXQUFXO0NBQ1oiLCJmaWxlIjoidGVzdC9maXh0dXJlcy9kaXN0L2V4dHJhY3QtLXNvdXJjZW1hcC1pbmxpbmUvYnVuZGxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImJvZHkge1xuICBjb2xvcjogcmVkO1xufVxuIiwiLmJhciB7XG4gIGNvbG9yOiByZWQ7XG59XG4iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCIucGNzcyB7XG4gIGNvbG9yOiByZWQ7XG59XG4iXX0=*/"
225+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5jc3MiLCJiYXIuY3NzIiwidGVzdC9maXh0dXJlcy9zaW1wbGUvc3R5bGUuc3R5bCIsInN0eWxlLnN0eWwiLCJ0ZXN0L2ZpeHR1cmVzL3NpbXBsZS9zdHlsZS5zYXNzIiwic3R5bGUuc2FzcyIsInRlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLmxlc3MiLCJzdHlsZS5sZXNzIiwic3R5bGUucGNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLFdBQVc7Q0FDWjs7QUNGRDtFQUNFLFdBQVc7Q0FDWjs7QUNGRDtFQUNFLFlBQUE7RUFDQSxpQkFBQTtDQ0NEO0FBQ0QsMERBQTBEO0FDSjFEO0VBQ0UsV0FBVTtFQUNWLHVCQUFzQixFQUFHOztBQ0UzQix1Q0FBdUM7QUNEdkM7RUFDRSxlQUFBO0NDRkQ7O0FDRkQ7RUFDRSxXQUFXO0NBQ1oiLCJmaWxlIjoiYnVuZGxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImJvZHkge1xuICBjb2xvcjogcmVkO1xufVxuIiwiLmJhciB7XG4gIGNvbG9yOiByZWQ7XG59XG4iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCIucGNzcyB7XG4gIGNvbG9yOiByZWQ7XG59XG4iXX0=*/"
226226
`;
227227

228228
exports[`extract sourcemap-inline: js code 1`] = `
@@ -261,7 +261,7 @@ body {
261261
/*# sourceMappingURL=bundle.css.map */"
262262
`;
263263

264-
exports[`extract sourcemap-true: css map 1`] = `"{\\"version\\":3,\\"sources\\":[\\"test/fixtures/dist/extract--sourcemap-true/foo.css\\",\\"test/fixtures/dist/extract--sourcemap-true/bar.css\\",\\"test/fixtures/dist/extract--sourcemap-true/test/fixtures/simple/style.styl\\",\\"test/fixtures/dist/extract--sourcemap-true/style.styl\\",\\"test/fixtures/dist/extract--sourcemap-true/style.sass\\",\\"test/fixtures/dist/extract--sourcemap-true/test/fixtures/simple/style.less\\",\\"test/fixtures/dist/extract--sourcemap-true/style.less\\",\\"test/fixtures/dist/extract--sourcemap-true/style.pcss\\"],\\"names\\":[],\\"mappings\\":\\"AAAA;EACE,WAAW;CACZ;;ACFD;EACE,WAAW;CACZ;;ACFD;EACE,YAAA;EACA,iBAAA;CCCD;AACD,0DAA0D;ACJ1D;EACE,WAAW;EACX,uBAAuB,EAAE;;ACC3B;EACE,eAAA;CCFD;;ACFD;EACE,WAAW;CACZ\\",\\"file\\":\\"test/fixtures/dist/extract--sourcemap-true/bundle.css\\",\\"sourcesContent\\":[\\"body {\\\\n color: red;\\\\n}\\\\n\\",\\".bar {\\\\n color: red;\\\\n}\\\\n\\",null,null,\\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\",null,null,\\".pcss {\\\\n color: red;\\\\n}\\\\n\\"]}"`;
264+
exports[`extract sourcemap-true: css map 1`] = `"{\\"version\\":3,\\"sources\\":[\\"foo.css\\",\\"bar.css\\",\\"test/fixtures/simple/style.styl\\",\\"style.styl\\",\\"style.sass\\",\\"test/fixtures/simple/style.less\\",\\"style.less\\",\\"style.pcss\\"],\\"names\\":[],\\"mappings\\":\\"AAAA;EACE,WAAW;CACZ;;ACFD;EACE,WAAW;CACZ;;ACFD;EACE,YAAA;EACA,iBAAA;CCCD;AACD,0DAA0D;ACJ1D;EACE,WAAW;EACX,uBAAuB,EAAE;;ACC3B;EACE,eAAA;CCFD;;ACFD;EACE,WAAW;CACZ\\",\\"file\\":\\"bundle.css\\",\\"sourcesContent\\":[\\"body {\\\\n color: red;\\\\n}\\\\n\\",\\".bar {\\\\n color: red;\\\\n}\\\\n\\",null,null,\\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\",null,null,\\".pcss {\\\\n color: red;\\\\n}\\\\n\\"]}"`;
265265

266266
exports[`extract sourcemap-true: js code 1`] = `
267267
"'use strict';
@@ -821,7 +821,7 @@ styleInject(css$1);
821821
var css$2 = \\"body {\\\\n color: #f00;\\\\n background: #f00;\\\\n}\\\\n/*# sourceMappingURL=test/fixtures/simple/style.css.map */\\\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLnN0eWwiLCJzdHlsZS5zdHlsIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsWUFBQTtFQUNBLGlCQUFBO0NDQ0Q7QUFDRCwwREFBMEQiLCJmaWxlIjoic3R5bGUuc3R5bCJ9 */\\";
822822
styleInject(css$2);
823823
824-
var css$3 = \\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\\\n/*# sourceMappingURL=../../../inline */\\\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLnNhc3MiLCJzdHlsZS5zYXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVTtFQUNWLHVCQUFzQixFQUFJOztBQ0U1Qix1Q0FBdUMiLCJmaWxlIjoic3R5bGUuc2FzcyJ9 */\\";
824+
var css$3 = \\"#sidebar {\\\\n width: 30%;\\\\n background-color: #faa; }\\\\n\\\\n/*# sourceMappingURL=../../../inline */\\\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLnNhc3MiLCJzdHlsZS5zYXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVTtFQUNWLHVCQUFzQixFQUFHOztBQ0UzQix1Q0FBdUMiLCJmaWxlIjoic3R5bGUuc2FzcyJ9 */\\";
825825
styleInject(css$3);
826826
827827
var css$4 = \\"#header {\\\\n color: #6c94be;\\\\n}\\\\n\\\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvc2ltcGxlL3N0eWxlLmxlc3MiLCJzdHlsZS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBO0VBQ0UsZUFBQTtDQ0ZEIiwiZmlsZSI6InN0eWxlLmxlc3MifQ== */\\";

0 commit comments

Comments
 (0)