使用Parcel编译Google Apps Script HTML模板时遇语法错误的解决咨询
问题描述
我尝试在App Sheet中向HTML模板传递变量,由于Google Apps Script的特性,需要用Parcel将代码编译为单个HTML文件。接收变量的代码如下:
<script> var doc_id = <?= doc_id ?>; </script>
编译时触发如下错误:
🚨 Build failed.
@parcel/transformer-js: Expression expected16 | <script> > 17 | var doc_id = <?= doc_id ?>; > | ^ 18 | </script>
想请教两种方案:要么让Parcel忽略该行错误,要么有其他可行的替代办法。
解决办法
方案1:给占位符添加引号,让语法合法
Parcel会把<script>标签内的内容当作标准JS解析,<?= doc_id ?>这种模板语法不属于合法JS,所以报错。给占位符加上单引号,让它变成合法的字符串字面量,Parcel就不会报错,而Google Apps Script渲染时依然能正常替换变量:
<script> var doc_id = '<?= doc_id ?>'; </script>
方案2:用Parcel的Raw加载器跳过解析
如果不想修改代码结构,可以给目标HTML文件指定Raw加载器,让Parcel直接原封不动打包,不解析其中的JS内容。
在导入该HTML文件时,使用如下写法:
import html from 'raw-loader!./your-template.html';
也可以在Parcel的配置文件中添加规则,让特定HTML文件默认使用Raw加载器。
方案3:临时将占位符改为注释,编译后替换
先把模板占位符写成JS注释,确保编译时语法合法,之后再用简单脚本替换回Google Apps Script的模板语法:
<script> var doc_id = /* <?= doc_id ?> */ ''; </script>
编译完成后,用Node.js脚本或者其他字符串替换工具,把/* <?= doc_id ?> */ ''替换成<?= doc_id ?>即可。
内容的提问来源于stack exchange,提问作者user1016976
相关产品推荐
相关产品推荐

