-
-
Notifications
You must be signed in to change notification settings - Fork 494
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
当传入的变量值为数字0时,变量消失 #39
Comments
能否贴点代码? |
呃。。那我就贴个简写的代码吧: // js
let userTpl = require("./tpl/index.tmpl");
let USER_INFO = {isExpired:0}
$("#userInfoTpl").html(
userTpl(
$.extend(USER_INFO, {
// isExpired: USER_INFO.isExpired + "", // 如果值是数字0,那么tmpl会丢失这个变量(这是后来写的)
})
)
) <!-- index.tmpl -->
if(isExpired != 0) {#>
<p>一开始是被提了 bug,查了发现这个 if 判断结果一直是 true</p>
<#}#>
<p>然后我就打印了一下发现没有打印出 0,而是空<#:=isExpired#></p> // webpack.base.conf.js
module: {
rules: [
// eslint
{
test: /\.(js)$/,
loader: "eslint-loader",
enforce: "pre",
include: [path.join(__dirname, "src")],
options: {
fix: true
}
},
// 处理js, 兼容处理到es5
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
plugins: [
"@babel/plugin-transform-runtime",
"@babel/plugin-transform-modules-commonjs"
]
}
}
},
// html处理
{
test: /\.html$/,
use: [
{
loader: "html-loader",
options: {
minimize: true, // 压缩
attrs: ["img:src", "img:data-src", "audio:src"], // 处理html文件中的src引用
root: path.resolve(__dirname, "./dist")
}
}
]
},
// ejs模板处理
{
test: /\.ejs$/,
use: ["ejs-loader?variable=data"]
},
// 字体处理
{
test: /\.(woff|woff2|eot|ttf|svg)$/,
use: {
loader: "file-loader",
options: {
// 保留原文件名和后缀名
name: "[name].[hash:7].[ext]",
// 输出到dist/fonts/目录
outputPath: "fonts"
}
}
},
// htc文件处理
{
test: /\.(htc)$/,
use: {
loader: "file-loader",
options: {
// 保留原文件名和后缀名
name: "[name].[hash:7].[ext]",
// 输出到dist/static/目录
outputPath: "static"
}
}
},
// templatejs处理
{
test: /\.tmpl/,
loader: "templatejs-loader",
options: {
sTag: "<#",
eTag: "#>",
escape: false,
expression: 'require("@templatejs/runtime").default'
}
},
// 图片处理
{
test: /\.(png|jpe?g|gif|svg|ico)(\?.*)?$/,
loader: "url-loader",
options: {
esModule: false, // 不使用es语法加载
limit: 1024, // 大小范围内使用base64
name: "[name].[hash:7].[ext]",
// publicPath: "./img",
outputPath: "img"
}
}
]
}, |
收到,我排查下 看起来很奇怪 |
我打算写个 create-template-app 这样就能快速搭建一个项目现场了o(╯□╰)o |
亲 我好像没能复现啊 我的 app.js var tpl = require('./demo.tmpl');
var html = tpl({
a: 0,
isExpired: 0,
});
document.getElementById('test').innerHTML = html; 我的demo.tmpl <# if(isExpired != 0) {#>
<p>一开始是被提了 bug,查了发现这个 if 判断结果一直是 true</p>
<#}#> 结果是好的,下面是build完的代码,可以看到
你是哪里搞的不对?我看你的代码里,if前面缺少一个
|
代码肯定是没问题的啦,少 <# 是因为少复制了吧大概,我修完那个 bug 以后昨天在开发新功能的时候又遇到了这个问题,今天我又试了一下,0 和 false 都会导致值丢失,如果正常无法复现的话可能是和我项目里的其他东西配合时出了问题吧。。。 如果 create-template-app 弄好的话麻烦@我一下,我想试试如何复现😂 |
我看了一下编译出来的代码
这个 emailTime 就是昨天我写代码时又遇到时的变量 |
嗯我知道咋回事了,这个判断有问题啊。。。 a = e["emailTime"] || r.functionMap["emailTime"] || i["emailTime"] 应该这样判断。。。 a = "emailTime" in a ? e["emailTime"] : r.functionMap["emailTime"] bug捉到了,我得发个版😳 |
这两种方式都有一个问题,会访问到原型链上的属性 var a = {};
a.toString // 能获取到
'toString' in a // true 更好的方式是用hasOwnProperty判断
|
升级到 >= [email protected] 已修复这个问题 |
看着下只有2.x有这个问题,0.x没这个问题,不用修复
|
TODO:后面改成hasOwnProperty,同时加了单元测试后,在关闭这个issue |
cli写好了,试试^_^
|
问题是什么
当传入的变量值为数字0时,变量消失,传1就有值
环境
webpack + "templatejs-loader": "^2.2.0" + "@templatejs/runtime": "^2.1.0"
其他
这算bug么
The text was updated successfully, but these errors were encountered: