如何在 CRA 构建期间将 scss 编译包含到 css
How to include scss compilation to css during CRA build
我想从我的 CRA 应用程序创建 npm 包。可以说我有一些组件,其中包含 .scss 文件。当我构建此应用程序时,我将 .tsx/ts 组件及其定义编译为 JavaScript 文件。
编译后的文件夹层次结构可能是这样的
components
=> BurgerMenu
=> BurgerMenu.d.ts
=> BurgerMenu.js
=> BurgerMenu.js.map
但是编译的 JavaScript 文件导入 scss 文件 require("./burgerMenu.scss");
而不是 css 文件并且 css 文件未编译到特定文件夹中。
想要的结果如下
components
=> BurgerMenu
=> BurgerMenu.d.ts
=> BurgerMenu.js
=> BurgerMenu.js.map
=> BurgerMenu.css
如何在构建期间设置 sass 编译以及在每个组件中将导入从 scss 更改为 css?
BurgerMenu 组件示例
import * as React from "react";
import "./burgerMenu.scss";
export const BurgerMenu = (props) => {
//removed for brevity
};
package.json
{
"name": "app",
"version": "0.1.0",
"private": false,
"main": "dist/js/index.js",
"module": "dist/esm/index.js",
"types": "dist/js/index.d.ts",
"publishConfig": {
"access": "public",
"tag": "prerelease"
},
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"build:lib": "yarn build:babel && yarn build:types && node ./scripts/copyTS.js",
//TODO: node sass compile
"build:babel": "concurrently \"yarn build:babel:esm && yarn build:babel:umd\" \"yarn build:babel:cjs\"",
"build:babel:cjs": "cross-env BABEL_ENV=cjs babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/js --presets=@babel/env",
"build:babel:esm": "cross-env BABEL_ENV=esm babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/esm",
"build:babel:umd": "cross-env BABEL_ENV=umd babel --source-maps --extensions \".js\" dist/esm --out-dir dist/umd --plugins=transform-es2015-modules-umd",
"build:types": "tsc -p tsconfig.gen-dts.json",
"clean": "rimraf dist",
"develop": "yarn build:types && yarn build:babel:esm --skip-initial-build --watch --verbose",
},
}
node-sass
npm 包可用于将所有 .scss 文件转换为 .css 文件,同样可用于导入模块
将此添加到您的 package.json
"scripts" : {
...
"build-css": "node-sass src/scss/ -o dist"
}
这里很好地解释了如何使用 node-sass
-
我想从我的 CRA 应用程序创建 npm 包。可以说我有一些组件,其中包含 .scss 文件。当我构建此应用程序时,我将 .tsx/ts 组件及其定义编译为 JavaScript 文件。
编译后的文件夹层次结构可能是这样的
components
=> BurgerMenu
=> BurgerMenu.d.ts
=> BurgerMenu.js
=> BurgerMenu.js.map
但是编译的 JavaScript 文件导入 scss 文件 require("./burgerMenu.scss");
而不是 css 文件并且 css 文件未编译到特定文件夹中。
想要的结果如下
components
=> BurgerMenu
=> BurgerMenu.d.ts
=> BurgerMenu.js
=> BurgerMenu.js.map
=> BurgerMenu.css
如何在构建期间设置 sass 编译以及在每个组件中将导入从 scss 更改为 css?
BurgerMenu 组件示例
import * as React from "react";
import "./burgerMenu.scss";
export const BurgerMenu = (props) => {
//removed for brevity
};
package.json
{
"name": "app",
"version": "0.1.0",
"private": false,
"main": "dist/js/index.js",
"module": "dist/esm/index.js",
"types": "dist/js/index.d.ts",
"publishConfig": {
"access": "public",
"tag": "prerelease"
},
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"build:lib": "yarn build:babel && yarn build:types && node ./scripts/copyTS.js",
//TODO: node sass compile
"build:babel": "concurrently \"yarn build:babel:esm && yarn build:babel:umd\" \"yarn build:babel:cjs\"",
"build:babel:cjs": "cross-env BABEL_ENV=cjs babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/js --presets=@babel/env",
"build:babel:esm": "cross-env BABEL_ENV=esm babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/esm",
"build:babel:umd": "cross-env BABEL_ENV=umd babel --source-maps --extensions \".js\" dist/esm --out-dir dist/umd --plugins=transform-es2015-modules-umd",
"build:types": "tsc -p tsconfig.gen-dts.json",
"clean": "rimraf dist",
"develop": "yarn build:types && yarn build:babel:esm --skip-initial-build --watch --verbose",
},
}
node-sass
npm 包可用于将所有 .scss 文件转换为 .css 文件,同样可用于导入模块
将此添加到您的 package.json
"scripts" : {
...
"build-css": "node-sass src/scss/ -o dist"
}
这里很好地解释了如何使用 node-sass
-