Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: resolve style fields in package json #17346

Merged
merged 29 commits into from
Jun 14, 2023
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 34 additions & 2 deletions lib/config/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,10 @@ const applyWebpackOptionsDefaults = options => {
cache,
context: /** @type {Context} */ (options.context),
targetProperties,
mode: /** @type {Mode} */ (options.mode)
mode: /** @type {Mode} */ (options.mode),
css:
/** @type {NonNullable<ExperimentsNormalized["css"]>} */
(options.experiments.css)
}),
options.resolve
);
Expand Down Expand Up @@ -1398,9 +1401,16 @@ const applyOptimizationDefaults = (
* @param {string} options.context build context
* @param {TargetProperties | false} options.targetProperties target properties
* @param {Mode} options.mode mode
* @param {CssExperimentOptions|false} options.css is css enabled
* @returns {ResolveOptions} resolve options
*/
const getResolveDefaults = ({ cache, context, targetProperties, mode }) => {
const getResolveDefaults = ({
cache,
context,
targetProperties,
mode,
css
}) => {
/** @type {string[]} */
const conditions = ["webpack"];

Expand Down Expand Up @@ -1468,6 +1478,28 @@ const getResolveDefaults = ({ cache, context, targetProperties, mode }) => {
}
};

if (css) {
const styleConditions = [];

styleConditions.push("webpack");
styleConditions.push(mode === "development" ? "development" : "production");
styleConditions.push("style");

/** @type {function(): ResolveOptions} */
const styleDeps = () => ({
// We avoid using any files because we don't have a spec for that
mainFiles: [],
mainFields: ["style", "..."],
conditionNames: styleConditions,
extensions: [".css"]
});

resolveOptions.byDependency["css-import"] = {
...styleDeps(),
preferRelative: true
};
}

return resolveOptions;
};

Expand Down
23 changes: 20 additions & 3 deletions test/Defaults.unittest.js
Original file line number Diff line number Diff line change
Expand Up @@ -2254,14 +2254,14 @@ describe("snapshots", () => {
+ },
+ ],
+ "test": /\\.css$/i,
+ },
+ Object {
@@ ... @@
+ "mimetype": "text/css+module",
+ "resolve": Object {
+ "fullySpecified": true,
+ },
+ "type": "css/module",
@@ ... @@
+ },
+ Object {
+ "mimetype": "text/css",
+ "resolve": Object {
+ "fullySpecified": true,
Expand All @@ -2287,6 +2287,23 @@ describe("snapshots", () => {
+ "hashDigestLength": 16,
+ "hashFunction": "xxhash64",
@@ ... @@
+ "css-import": Object {
+ "conditionNames": Array [
+ "webpack",
+ "production",
+ "style",
+ ],
+ "extensions": Array [
+ ".css",
+ ],
+ "mainFields": Array [
+ "style",
+ "...",
+ ],
+ "mainFiles": Array [],
+ "preferRelative": true,
+ },
@@ ... @@
- "<cwd>/node_modules/",
+ /^(.+?[\\\\/]node_modules[\\\\/])/,
`)
Expand Down
71 changes: 70 additions & 1 deletion test/__snapshots__/ConfigCacheTestCases.longtest.js.snap

Large diffs are not rendered by default.

71 changes: 70 additions & 1 deletion test/__snapshots__/ConfigTestCases.basictest.js.snap

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions test/configCases/css/css-import/directory/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.directory-css {
color: red;
}
5 changes: 5 additions & 0 deletions test/configCases/css/css-import/errors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = [
/Can't resolve 'non-exported-css'/,
/Can't resolve '\.\/directory'/,
/Can't resolve 'condition-names-subpath\/non-valid\.css'/
];
3 changes: 3 additions & 0 deletions test/configCases/css/css-import/extensions-imported.mycss
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.custom-extension{
color: green;
}
5 changes: 5 additions & 0 deletions test/configCases/css/css-import/file.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@link-color: #428bca;

.link {
color: @link-color;
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/configCases/css/css-import/prefer-relative.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.relative {
color: red;
}
3 changes: 3 additions & 0 deletions test/configCases/css/css-import/some-file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function doNotImportCss() {
return 'doNotImportCss';
}
1 change: 0 additions & 1 deletion test/configCases/css/css-import/string-loader.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
module.exports = function loader(content) {
return content + `.using-loader { color: red; }`;
};

24 changes: 24 additions & 0 deletions test/configCases/css/css-import/style-import.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
@import "style-library";
@import "main-field";
@import "package-with-exports";
@import "./extensions-imported.mycss";
@import "./with-less-import.css";
@import "prefer-relative.css";
@import "condition-names-style";
@import "condition-names-style-mode";
@import "condition-names-subpath/custom.css";
@import "condition-names-subpath-extra/custom.css";
@import "condition-names-style-less";
@import "condition-names-custom-name";
@import "style-and-main-library";
@import "condition-names-webpack";
@import "condition-names-style-nested";

/* Failed */

@import "js-import";
@import "condition-names-webpack-js";
@import url("some-file.js");
@import "non-exported-css";
@import "./directory";
@import "condition-names-subpath/non-valid.css";
2 changes: 2 additions & 0 deletions test/configCases/css/css-import/style.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@import "./style-import.css";
@import "print.css?foo=1";
@import url("print.css?foo=2");
@import "print.css?foo=3" layer(default);
Expand Down Expand Up @@ -124,6 +125,7 @@ le3.css?=bar4');
@import url(' ./string-loader.js?esModule=false!./test.css ') screen and (orientation: landscape);
@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D);
@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D) screen and (orientation:landscape);
@import url("data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9");

@import url("./style5.css?foo=1") supports();
@import url("./style5.css?foo=2") supports( );
Expand Down