diff --git a/package.json b/package.json index d091d2ef3..1be25026b 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "autoprefixer": "^9.4.5", "bytes": "^3.0.0", "chalk": "^2.4.1", + "detective": "^5.2.0", "fs-extra": "^8.0.0", "lodash": "^4.17.11", "node-emoji": "^1.8.1", diff --git a/src/index.js b/src/index.js index 11f1aba46..b86050c2e 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ import fs from 'fs' import _ from 'lodash' import postcss from 'postcss' +import getModuleDependencies from './lib/getModuleDependencies' import registerConfigAsDependency from './lib/registerConfigAsDependency' import processTailwindFeatures from './processTailwindFeatures' import formatCSS from './lib/formatCSS' @@ -49,7 +50,9 @@ const getConfigFunction = config => () => { } if (!_.isObject(config)) { - delete require.cache[require.resolve(config)] + getModuleDependencies(config).forEach(mdl => { + delete require.cache[require.resolve(mdl.file)] + }) } return resolveConfig([ diff --git a/src/lib/getModuleDependencies.js b/src/lib/getModuleDependencies.js new file mode 100644 index 000000000..3cb6760ff --- /dev/null +++ b/src/lib/getModuleDependencies.js @@ -0,0 +1,30 @@ +import fs from 'fs' +import path from 'path' +import resolve from 'resolve' +import detective from 'detective' + +function createModule(file) { + const source = fs.readFileSync(file, 'utf-8') + const requires = detective(source) + + return { file, requires } +} + +export default function getModuleDependencies(entryFile) { + const rootModule = createModule(entryFile) + const modules = [rootModule] + + // Iterate over the modules, even when new + // ones are being added + for (const mdl of modules) { + mdl.requires.forEach(dep => { + const basedir = path.dirname(mdl.file) + const depPath = resolve.sync(dep, { basedir }) + const depModule = createModule(depPath) + + modules.push(depModule) + }) + } + + return modules +} diff --git a/src/lib/registerConfigAsDependency.js b/src/lib/registerConfigAsDependency.js index e4660e68d..13f3a5f35 100644 --- a/src/lib/registerConfigAsDependency.js +++ b/src/lib/registerConfigAsDependency.js @@ -1,4 +1,5 @@ import fs from 'fs' +import getModuleDependencies from './getModuleDependencies' export default function(configFile) { if (!fs.existsSync(configFile)) { @@ -6,10 +7,12 @@ export default function(configFile) { } return function(css, opts) { - opts.messages.push({ - type: 'dependency', - file: configFile, - parent: css.source.input.file, + getModuleDependencies(configFile).forEach(mdl => { + opts.messages.push({ + type: 'dependency', + parent: css.source.input.file, + file: mdl.file, + }) }) } } diff --git a/yarn.lock b/yarn.lock index 9d96dfeae..e01cbf9a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -914,6 +914,11 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0: version "4.3.2" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" @@ -927,7 +932,17 @@ acorn-jsx@^5.0.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== -acorn-walk@^6.0.1: +acorn-node@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.7.0.tgz#aac6a559d27af6176b076ab6fb13c5974c213e3b" + integrity sha512-XhahLSsCB6X6CJbe+uNu3Mn9sJBNFxtBN9NLgAOQovfS6Kh0lDUtmlclhjn9CvEK7A7YyRU13PXlNcpSiLI9Yw== + dependencies: + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-walk "^6.1.1" + xtend "^4.0.1" + +acorn-walk@^6.0.1, acorn-walk@^6.1.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== @@ -942,6 +957,11 @@ acorn@^6.0.1, acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== +acorn@^6.1.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" + integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== + ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" @@ -1588,6 +1608,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1608,6 +1633,15 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + diff-sequences@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" @@ -4963,6 +4997,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + "y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"