关于svg:node.js:如何将参数值从终端传递到js脚本

Node.js : how to pass parameter's value from terminal to JS script

给定基于jsdomsvgcreator.node.js脚本文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var jsdom = require('jsdom');
jsdom.env(
 "<html><body></body></html>",        // CREATE DOM HOOK
  [ 'http://d3js.org/d3.v3.min.js',    // JS DEPENDENCIES online ...
  'js/d3.v3.min.js' ],                 // ... & offline
// D3JS CODE * * * * * * * * * * * * * * * * * * * * * * * *
  function (err, window) {
    var svg = window.d3.select("body")
        .append("svg")
        .attr("width", 100)
        .attr("height", 100);
    svg.append("rect")
        .attr("id","rect1")
        .attr("x", 10)
        .attr("y", 10)
        .attr("width", 80)
        .attr("height", 80)
        .style("fill","green");
    // END svg design

  //PRINTING OUT SELECTION
    console.log(window.d3.select("body").html());
 }
// END (D3JS) * * * * * * * * * * * * * * * * * * * * * * * *
);

假设我使用nodejs终端命令运行它并生成一个output.svg文件:

1
node svgcreator.node.js > output.svg  # nodeJS + script command

如何将参数值从终端传递到nodejs?

测试依赖项:

  • svgCreator.node.js Github存储库:git clone '[email protected]:hugolpz/svgcreator.node.js.git'
  • 需要jsdom,使用:sudo npm install -g jsdom(全局)。

使用的解决方案(@matt_harrison):我们依赖于process.env.myVar

svgcreator.node.jsJS代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var jsdom = require('jsdom');
jsdom.env(
 "<html><body></body></html>",        // CREATE DOM HOOK:
  [ 'http://d3js.org/d3.v3.min.js',    // JS DEPENDENCIES online ...
  'js/d3.v3.min.js' ],                 // ... & offline
// D3JS CODE * * * * * * * * * * * * * * * * * * * * * * * *
  function (err, window) {

    var color = process.env.COLOR;     // <<################# IMPORTANT !!
    var svg = window.d3.select("body")
        .append("svg")
        .attr("width", 100)
        .attr("height", 100);
    svg.append("rect")
        .attr("id","rect1")
        .attr("x", 10)
        .attr("y", 10)
        .attr("width", 80)
        .attr("height", 80)
        .style("fill", color);         // <<################# IMPORTANT !!
    // END svg design

  //PRINTING OUT SELECTION
    console.log(window.d3.select("body").html());
 }
// END (D3JS) * * * * * * * * * * * * * * * * * * * * * * * *
);

终端节点命令:

1
COLOR=#66AAFF node svgcreator.node.js > out.svg   # <<############# IMPORTANT !! setting the value.

+1@Matt_Harrison回答并感谢提问!


在终端中,可以使用环境变量:

1
$ COLOR=#FFFFFF node jsdom.node.js

在您的JS中,DO:

1
var color = process.env.COLOR;

或者可以向命令添加其他参数:

1
$ node jsdom.node.js '#FFFFFF'

在您的JS中:

1
var color = process.argv[2];

如果你想使用一个图书馆,我建议你去最小的图书馆,或者指挥官那里寻找一个更全面的解决方案。