From 03a680d2195e21e0dd2a1b64c32c24efb6af5fdc Mon Sep 17 00:00:00 2001 From: Andrey Rublev Date: Sat, 5 Mar 2016 08:07:22 +0600 Subject: [PATCH 1/2] more accurate way for resolving files in node_modules --- package.json | 5 +++-- src/file-system-loader.js | 6 ++++-- test/test-cases/compose-local-node-module/expected.css | 5 +++++ test/test-cases/compose-local-node-module/expected.json | 3 +++ .../node_modules/cool-local-styles/foo.css | 3 +++ test/test-cases/compose-local-node-module/source.css | 3 +++ 6 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 test/test-cases/compose-local-node-module/expected.css create mode 100644 test/test-cases/compose-local-node-module/expected.json create mode 100644 test/test-cases/compose-local-node-module/node_modules/cool-local-styles/foo.css create mode 100644 test/test-cases/compose-local-node-module/source.css diff --git a/package.json b/package.json index bb87ea1..6b87a96 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,11 @@ "dependencies": { "icss-replace-symbols": "1.0.2", "postcss": "5.0.10", - "postcss-modules-values": "1.1.1", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.1", - "postcss-modules-scope": "1.0.0" + "postcss-modules-scope": "1.0.0", + "postcss-modules-values": "1.1.1", + "resolve": "^1.1.7" }, "devDependencies": { "babel": "5.8.29", diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 2a3f47d..299a2b2 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -1,6 +1,7 @@ import Core from './index.js' import fs from 'fs' import path from 'path' +import nodeResolve from 'resolve' // Sorts dependencies in the following way: // AAA comes before AA and A @@ -34,12 +35,13 @@ export default class FileSystemLoader { return new Promise( ( resolve, reject ) => { let relativeDir = path.dirname( relativeTo ), rootRelativePath = path.resolve( relativeDir, newPath ), - fileRelativePath = path.resolve( path.join( this.root, relativeDir ), newPath ) + rootRelativeDir = path.join( this.root, relativeDir ), + fileRelativePath = path.resolve( rootRelativeDir, newPath ) // if the path is not relative or absolute, try to resolve it in node_modules if (newPath[0] !== '.' && newPath[0] !== '/') { try { - fileRelativePath = require.resolve(newPath); + fileRelativePath = nodeResolve.sync(newPath, { basedir: rootRelativeDir }); } catch (e) {} } diff --git a/test/test-cases/compose-local-node-module/expected.css b/test/test-cases/compose-local-node-module/expected.css new file mode 100644 index 0000000..5e431a3 --- /dev/null +++ b/test/test-cases/compose-local-node-module/expected.css @@ -0,0 +1,5 @@ +._compose_local_node_module_cool_local_styles_foo__example { + color: #F00; +} +._compose_local_node_module_source__foo { +} diff --git a/test/test-cases/compose-local-node-module/expected.json b/test/test-cases/compose-local-node-module/expected.json new file mode 100644 index 0000000..eb2428f --- /dev/null +++ b/test/test-cases/compose-local-node-module/expected.json @@ -0,0 +1,3 @@ +{ + "foo": "_compose_local_node_module_source__foo _compose_local_node_module_cool_local_styles_foo__example" +} diff --git a/test/test-cases/compose-local-node-module/node_modules/cool-local-styles/foo.css b/test/test-cases/compose-local-node-module/node_modules/cool-local-styles/foo.css new file mode 100644 index 0000000..65f95db --- /dev/null +++ b/test/test-cases/compose-local-node-module/node_modules/cool-local-styles/foo.css @@ -0,0 +1,3 @@ +.example { + color: #F00; +} diff --git a/test/test-cases/compose-local-node-module/source.css b/test/test-cases/compose-local-node-module/source.css new file mode 100644 index 0000000..bca8a65 --- /dev/null +++ b/test/test-cases/compose-local-node-module/source.css @@ -0,0 +1,3 @@ +.foo { + composes: example from "cool-local-styles/foo.css"; +} From c0418581a3fff59d6ce39341214855f17543f6fd Mon Sep 17 00:00:00 2001 From: Andrey Rublev Date: Tue, 8 Mar 2016 04:18:44 +0600 Subject: [PATCH 2/2] actualize rootRelativePath too --- src/file-system-loader.js | 2 ++ test/test-cases/compose-local-node-module/expected.css | 2 +- test/test-cases/compose-local-node-module/expected.json | 2 +- test/test-cases/compose-node-module/expected.css | 2 +- test/test-cases/compose-node-module/expected.json | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 299a2b2..402828f 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -42,6 +42,8 @@ export default class FileSystemLoader { if (newPath[0] !== '.' && newPath[0] !== '/') { try { fileRelativePath = nodeResolve.sync(newPath, { basedir: rootRelativeDir }); + // in this case we need to actualize rootRelativePath too + rootRelativePath = path.relative(this.root, fileRelativePath); } catch (e) {} } diff --git a/test/test-cases/compose-local-node-module/expected.css b/test/test-cases/compose-local-node-module/expected.css index 5e431a3..397d925 100644 --- a/test/test-cases/compose-local-node-module/expected.css +++ b/test/test-cases/compose-local-node-module/expected.css @@ -1,4 +1,4 @@ -._compose_local_node_module_cool_local_styles_foo__example { +._compose_local_node_module_node_modules_cool_local_styles_foo__example { color: #F00; } ._compose_local_node_module_source__foo { diff --git a/test/test-cases/compose-local-node-module/expected.json b/test/test-cases/compose-local-node-module/expected.json index eb2428f..18f4013 100644 --- a/test/test-cases/compose-local-node-module/expected.json +++ b/test/test-cases/compose-local-node-module/expected.json @@ -1,3 +1,3 @@ { - "foo": "_compose_local_node_module_source__foo _compose_local_node_module_cool_local_styles_foo__example" + "foo": "_compose_local_node_module_source__foo _compose_local_node_module_node_modules_cool_local_styles_foo__example" } diff --git a/test/test-cases/compose-node-module/expected.css b/test/test-cases/compose-node-module/expected.css index 0667b94..f304ae0 100644 --- a/test/test-cases/compose-node-module/expected.css +++ b/test/test-cases/compose-node-module/expected.css @@ -1,4 +1,4 @@ -._compose_node_module_cool_styles_foo__example { +._node_modules_cool_styles_foo__example { color: #F00; } ._compose_node_module_source__foo { diff --git a/test/test-cases/compose-node-module/expected.json b/test/test-cases/compose-node-module/expected.json index a57448c..ce71efb 100644 --- a/test/test-cases/compose-node-module/expected.json +++ b/test/test-cases/compose-node-module/expected.json @@ -1,3 +1,3 @@ { - "foo": "_compose_node_module_source__foo _compose_node_module_cool_styles_foo__example" + "foo": "_compose_node_module_source__foo _node_modules_cool_styles_foo__example" }