节点包 - 是否可以在package.json中插入变量?

时间:2016-01-18 10:26:38

标签: json node.js gruntjs command-line-interface

我有一个使用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()
}

正如预期的那样,它不起作用。然后脚本运行,但内插变量被忽略。

任何解决方案或替代方案?如果可能的话,我希望不创建额外的文件只是为了存储变量。

由于

3 个答案:

答案 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,并且已经存在所有变量。但最后我觉得这只是一个品味问题,使用你觉得更简单或更舒适的东西。