javascript - 如何使用 nodeJs 生成 javascript 文件
问题描述
我的网站需要一个我可以在构建过程中生成的 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);
当事情变得更复杂时,我可以想象这种方法并不理想,所以我想知道是否有更好的方法来做这样的事情?
解决方案
你可以使用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});
包含在<%= %>
or中的代码<%- %>
将作为 javascript 执行,使用您提供的对象作为ejs.render
. <%- %>
当您不想对输出进行 html 编码时,使用该语法。
如果 ejs 对你来说太多了,你总是可以回到纯字符串插值(由模板文字提供):
var myPrefix = 'foo';
var importObj = {a: 10}
importObj = JSON.stringify(importObj)
var output = `export PREFIX = '${myPrefix}';
export const IMPORT_STUFF = ${importObj}`
但是,这不允许您从外部文件中读取模板,因此我会选择 ejs,这在这种情况下是更好的选择。
推荐阅读
- video - Rasberry Pi 服务在启动时不播放视频的问题
- laravel - 在测试 Laravel 时有没有办法伪造特定的事件监听器?
- thymeleaf - Thymeleaf 问题 - 变量被打印而不是值
- python - 用python搭建的FastAPI服务器闲置久了卡住了
- amazon-web-services - 我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?
- flutter - pubspec.lock 的第 5 行第 10 列出错:预期为“:”。╷ 5 │ 存档:
- swiftui - SwiftUI Spacer 不起作用 - 元素没有被推到行尾
- javascript - 如何借助两个常用值过滤 json 文件中的对象?我的意思是我想根据常见的 x 和 y 过滤 json 对象
- c# - 如何从.netcore 5中的csproj获取最小目标框架
- javascript - 使用 for 循环获取数组中过滤元素的总和