【发布时间】:2015-12-27 11:55:19
【问题描述】:
我正在整理一个将在 npm 上可用的 repo。 repo 由多个模块组成,类似于react-leaflet 和react-d3。应用程序开发人员将通过require/import 将模块包含在 npm 包中,例如:
import { ModuleOne, ModuleTwo } from 'myNpmPackage`;
我需要将 CSS 与每个模块一起打包,并且 CSS 将从每个模块中的 Sass 文件编译。
给定myNpmPackage 的文件夹结构,例如:
├── src
│ ├── ModuleOne
│ │ ├── index.js
│ │ ├── style.scss
│ ├── ModuleTwo
│ │ ├── index.js
│ │ ├── style.scss
├── package.json
有什么好的发布流程可以让myNpmPackage 的消费者可以使用这些.scss 文件(编译成.css),而不要求消费者明确包含/@import/link rel="stylesheet" CSS?
我正在使用 gulp 和 browserify,并且更愿意坚持使用该管道。
更新:我发现 parcelify 做了我需要的一些。我将以下内容添加到myNpmPackage/package.json:
"style": "src/**/*.scss",
"transforms": [
"sass-css-stream"
]
并将parcelify 添加到dependencies,使其与myNpmPackage 一起安装。
myNpmPackage 的消费者必须将以下内容添加到他们的gulpfile:
parcelify(b, {
bundles: {
style: './build/modules.css'
}
});
parcelify 将使用myNpmPackage/package.json 中的"style" glob 将.scss 模块中的所有.scss 文件汇总到myNpmPackage 的模块中,并将它们捆绑到./build/modules.css 中。
这已经到了那里,但由于两个原因并不理想:
- 每个模块的 CSS 文件都包含在消费者应用程序构建中,即使不是所有模块都包含在内;
- 此策略要求消费者应用程序开发人员将代码添加到他们的
gulpfile,而不是“正常工作”。
【问题讨论】:
-
我知道你想坚持使用 browserify 但webpack 实际上非常适合你的用例
-
@JulienCabanès 你介意详细说明一下吗?也许你比我更熟悉 webpack,并且可以分享一个我如何使用 webpack 做到这一点的示例。
标签: javascript sass npm gulp browserify