Stylus:为什么 stdin 在使用 require 时会产生不同的结果?
Stylus: why does stdin produce a different result when using require?
我正在尝试使用 npm
作为我的 task manager
,但我注意到 Stylus CLI
有一些我不理解的奇怪之处。
要运行Stylus CLI
一个文件,我有两个选择。
$ stylus styles/file.styl // basic
$ stylus < styles/file.styl // using stdin
并且在 file.styl 中,我使用 @require
来包含一些其他带有通配符的文件夹,以获取文件夹中的所有文件。
@charset "UTF-8";
@require 'base/*';
@require 'modules/*';
@require 'theme/*';
所以,当我 运行 $ stylus styles/file.styl
时,所有 运行 都是正确的,但是如果我 运行 $ stylus < styles/file.styl
我得到一个错误。
我能够通过更改我的 styl 文件中的 @require
调用来使其工作,如下所示:
@charset "UTF-8";
@require 'styles/base/*';
@require 'styles/modules/*';
@require 'styles/theme/*';
但我不知道为什么会这样,也不知道如何修复它,所以我可以通过命令行 运行 它。
我的目标是让它在 CLI 中正常工作,这样我就可以在我的 package.json
中使用它,并将它输送到其他任务中,例如 autoprefixer
和 combine-mq
或 css-pleeease
。我正在尝试复制我在同一个项目中使用的 gulpfile.js
,希望这能让我全神贯注于整个过程。
谢谢
更新:
我还应该包括 package.json
作为参考,以查看我最终的结果。这也设置了我要 post.
的答案
{
"name": "npm_BUILD",
"version": "1.0.0",
"description": "npm as a task manager",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"styles":"npm run styles:max && npm run styles:min",
"styles:max": "stylus < styles/site.styl | autoprefixer -b 'last 2 versions' > styles/final.css",
"styles:min": "cssmin < styles/final.css > styles/final.min.css"
},
"author": "Jason Lydon @bushwa",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^5.1.1",
"clean-css": "^3.2.2",
"combine-mq": "^0.8.1",
"concat": "^1.0.0",
"cssmin": "^0.4.3",
"filesize": "^3.1.2",
"stylus": "^0.50.0"
}
}
然后我 运行 $ npm run styles
创建了两个 css 文件,第二个被缩小了。
这与手写笔是否知道顶级输入文件的文件系统路径有关。当您将 styles/file.styl
的路径传递给它时,它会将 require
调用解释为相对于 styles/file.styl
文件,一切都很好。当您通过管道传输到 stdin 时,stylus 只知道 shell 中的当前工作目录,因此它解释相对于该目录的相对路径,在您的例子中是 styles
的父目录。如果你要 cd styles
那么它可能是双向的。
我的建议是使用相对于顶级 .styl 文件的路径,因为这非常合理,只需确保在 运行 stylus
之前 cd
进入该目录。
我不确定这是否是最佳答案,但这对我有用...
因此,根据 Peter Lyon 的回答,我更新了 package.json
中的命令,先跳转到样式目录,然后 运行!
stylus < styles/site.styl | autoprefixer -b 'last 2 versions' > styles/final.css
变成了
cd styles && stylus < site.styl | autoprefixer -b 'last 2 versions' > final.css
{
"name": "npm_BUILD",
"version": "1.0.0",
"description": "npm as a task manager",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"styles":"npm run styles:max && npm run styles:min",
"styles:max": "cd styles && stylus < site.styl | autoprefixer -b 'last 2 versions' > final.css",
"styles:min": "cssmin < styles/final.css > styles/final.min.css"
},
"author": "Jason Lydon @bushwa",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^5.1.1",
"clean-css": "^3.2.2",
"combine-mq": "^0.8.1",
"concat": "^1.0.0",
"cssmin": "^0.4.3",
"filesize": "^3.1.2",
"stylus": "^0.50.0"
}
}
我不想撒谎,这让我这个书呆子很开心。
我正在尝试使用 npm
作为我的 task manager
,但我注意到 Stylus CLI
有一些我不理解的奇怪之处。
要运行Stylus CLI
一个文件,我有两个选择。
$ stylus styles/file.styl // basic
$ stylus < styles/file.styl // using stdin
并且在 file.styl 中,我使用 @require
来包含一些其他带有通配符的文件夹,以获取文件夹中的所有文件。
@charset "UTF-8";
@require 'base/*';
@require 'modules/*';
@require 'theme/*';
所以,当我 运行 $ stylus styles/file.styl
时,所有 运行 都是正确的,但是如果我 运行 $ stylus < styles/file.styl
我得到一个错误。
我能够通过更改我的 styl 文件中的 @require
调用来使其工作,如下所示:
@charset "UTF-8";
@require 'styles/base/*';
@require 'styles/modules/*';
@require 'styles/theme/*';
但我不知道为什么会这样,也不知道如何修复它,所以我可以通过命令行 运行 它。
我的目标是让它在 CLI 中正常工作,这样我就可以在我的 package.json
中使用它,并将它输送到其他任务中,例如 autoprefixer
和 combine-mq
或 css-pleeease
。我正在尝试复制我在同一个项目中使用的 gulpfile.js
,希望这能让我全神贯注于整个过程。
谢谢
更新:
我还应该包括 package.json
作为参考,以查看我最终的结果。这也设置了我要 post.
{
"name": "npm_BUILD",
"version": "1.0.0",
"description": "npm as a task manager",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"styles":"npm run styles:max && npm run styles:min",
"styles:max": "stylus < styles/site.styl | autoprefixer -b 'last 2 versions' > styles/final.css",
"styles:min": "cssmin < styles/final.css > styles/final.min.css"
},
"author": "Jason Lydon @bushwa",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^5.1.1",
"clean-css": "^3.2.2",
"combine-mq": "^0.8.1",
"concat": "^1.0.0",
"cssmin": "^0.4.3",
"filesize": "^3.1.2",
"stylus": "^0.50.0"
}
}
然后我 运行 $ npm run styles
创建了两个 css 文件,第二个被缩小了。
这与手写笔是否知道顶级输入文件的文件系统路径有关。当您将 styles/file.styl
的路径传递给它时,它会将 require
调用解释为相对于 styles/file.styl
文件,一切都很好。当您通过管道传输到 stdin 时,stylus 只知道 shell 中的当前工作目录,因此它解释相对于该目录的相对路径,在您的例子中是 styles
的父目录。如果你要 cd styles
那么它可能是双向的。
我的建议是使用相对于顶级 .styl 文件的路径,因为这非常合理,只需确保在 运行 stylus
之前 cd
进入该目录。
我不确定这是否是最佳答案,但这对我有用...
因此,根据 Peter Lyon 的回答,我更新了 package.json
中的命令,先跳转到样式目录,然后 运行!
stylus < styles/site.styl | autoprefixer -b 'last 2 versions' > styles/final.css
变成了
cd styles && stylus < site.styl | autoprefixer -b 'last 2 versions' > final.css
{
"name": "npm_BUILD",
"version": "1.0.0",
"description": "npm as a task manager",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"styles":"npm run styles:max && npm run styles:min",
"styles:max": "cd styles && stylus < site.styl | autoprefixer -b 'last 2 versions' > final.css",
"styles:min": "cssmin < styles/final.css > styles/final.min.css"
},
"author": "Jason Lydon @bushwa",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^5.1.1",
"clean-css": "^3.2.2",
"combine-mq": "^0.8.1",
"concat": "^1.0.0",
"cssmin": "^0.4.3",
"filesize": "^3.1.2",
"stylus": "^0.50.0"
}
}
我不想撒谎,这让我这个书呆子很开心。