我有一个使用200 OK
编译Sass的静态网站。
目前我正在使用Grunt观看该文件,但我觉得它太过分了,因为我可以使用他们的内置CLI。
所以我在package.json中添加它:
node-sass
问题是,我需要// package.json
...
"scripts": {
"sass": "node-sass -w input/dir -o output-dir/"
}
require
中的--include-path
Sass框架模块(全局安装)。我可以在Gruntfile中执行此操作:
// Gruntfile.js
sass: {
options: {
includePaths: require("the-framework").includePaths()
},
...
},
所以我想到的第一件事是插入字符串,如:
// package.json
...
"scripts": {
"sass": "node-sass -w input/dir -o output-dir/ --include-path " + require("the-framework").includePaths()
}
正如预期的那样,它不起作用。然后脚本运行,但内插变量被忽略。
任何解决方案或替代方案?如果可能的话,我希望不创建额外的文件只是为了存储变量。
由于
答案 0 :(得分:6)
我不知道这是一种正确的方法,但我可以解释如何解决这个问题。
您无法在package.json
中插入变量,因为它必须是有效的json。你可以在这里写bash命令。
1)您可以编写需要结果的节点命令。如果includePaths()
没有返回字符串,您应该小心。
Node options:
-e, --eval script evaluate script
-p, --print evaluate script and print result
所以它会像
node -e "console.log(require('the-framework').includePaths())"
或--print
node -p "require('the-framework').includePaths()"
2)将上一个命令内联输出到sass脚本中。照顾正确的逃脱。
{
"scripts": {
"sass": "node-sass -w input/dir -o output-dir/ --include-path $(node -p \"require('the-framework').includePaths()\")"
}
}
有关执行bash命令的更多信息,您可以找到here。
P.S。 Windows版本不同
{
"scripts": {
"sass": "FOR /f \"delims=\" %v IN ('node -p \"require('edje').includePaths()[0]\"') DO node-sass -w assets/sass -o assets/css --include-path \"%v\""
}
}
您可以找到更多信息here。
答案 1 :(得分:0)
你可以这样:
“scripts”: {
“sass”: “node-sass --include-path scss scss/main.scss public/css/main.css”
},
答案 2 :(得分:0)
使用npm脚本可以通过多种方式解决此问题。
通过查看您的特定需求,我想到的第一个是,npm在调用脚本时接受额外的参数。例如:
npm run sass -- path/to/the-framework
这将解决:
node-sass -w input/dir -o output-dir/ --include-path path/to/the-framework
另一种方法是将代码移到.js
可执行文件(Node)中,让我们将其称为watch-sass.js
。
所以你的脚本看起来像:
"sass": "node watch-sass.js"
你会跑:
npm run sass
通过这种方式,您可以更自由地在文件中执行任何操作。
可能性是无限的,如果你愿意,你可以利用bash脚本而不是JS的强大功能,它们都可以读/写环境变量。但你不一定需要它们。例如,您可能只有一个shell脚本为您(或Python或Ruby ...)编写package.json,并且已经存在所有变量。但最后我觉得这只是一个品味问题,使用你觉得更简单或更舒适的东西。