如何使用nodeJs生成JavaScript文件

时间:2018-11-27 14:19:50

标签: javascript node.js

我的网站需要在构建过程中可以生成的JSON。

所以,我想做的是生成一个js文件,例如,以下内容:

export const PREFIX = 'foo';
export const IMPORT_STUFF = {
     a: 10,
     ....
}

对我来说,最简单的方法是这样的:

const TEMPLATE = `export PREFIX = '--foo--';
export const IMPORT_STUFF = `;

let output = TEMPLATE.replace('--foo--', myPefix);
output += JSON.stringify(importObj);

createJsFile(output);

当事情变得更加复杂时,我可以想象这种方法并不理想,所以我想知道是否有更好的方法来做这样的事情?

2 个答案:

答案 0 :(得分:2)

您可以使用ejs渲染一些基本模板。这是一个模板引擎,通常用于在html内呈现javascript,但是在这种情况下,您将在字符串内呈现javascript。

const ejs = require('ejs');
var myPrefix = 'foo';
var importObj = {a: 10}

const TEMPLATE = `export PREFIX = '<%= Prefix %>';
export const IMPORT_STUFF = <%- JSON.stringify(ImportObj) %>`;

let output = ejs.render(TEMPLATE, {Prefix: myPrefix, ImportObj: importObj});

<%= %><%- %>中包含的代码将使用您提供的对象作为ejs.render的第二个参数以javascript的形式执行。 当您不想对输出进行html编码时,将使用语法<%- %>

如果ejs对您来说太多了,您可以随时返回纯字符串插值(由template literals提供):

var myPrefix = 'foo';
var importObj = {a: 10}
importObj = JSON.stringify(importObj)

var output = `export PREFIX = '${myPrefix}';
export const IMPORT_STUFF = ${importObj}`

但是,例如,这不允许您从外部文件读取模板,因此我会选择ejs,在这种情况下,这是更好的选择。

答案 1 :(得分:1)

您还可以使用本机方法 util.inspect 在文件中编写纯 JavaScript 对象,如下所示:

// ...

// If we wants to adds the 'module.exports = ' part before 
fs.writeFileSync( process.cwd() + '/file.js',  'module.exports = ');

// Writes the plain object to the file
fs.appendFileSync( process.cwd() + '/file.js',  util.inspect(options));

如果有人需要,我在 this answer 中有更详细的解决方案