Nodejs 又来求助了 关于coffee和jade 去掉顶层function [结贴]
Nodejs 又来求助了 关于coffee和jade 去掉顶层function [结贴]
怎么全局关闭coffee的顶部function, 我用了-b 但是没什么效果.
我在用codekit 写jade,然后在jade里面调用了coffee
:coffee
eat 'food' for food in foods
但是会自动加上function
(function() {
var food, _i, _len;
for (_i = 0, _len = foods.length; _i < _len; _i++) {
food = foods[_i];
eat(‘food’);
}
}).call(this);
所以来求教怎么取消这个function
针对你提到的问题,CoffeeScript 和 Jade 在编译时默认会包裹顶层代码在一个立即执行函数表达式(IIFE)中。这通常是为了避免变量污染全局作用域,但有时可能不符合需求。
CoffeeScript
对于 CoffeeScript,可以通过设置编译选项来移除顶层的 IIFE。-b
或 --bare
选项确实可以用来去掉顶层的 IIFE,但有时候可能需要确保在编译过程中正确地应用这些选项。
示例代码:
// 使用 -b 选项编译 CoffeeScript
// 假设你的 CoffeeScript 文件名为 script.coffee
// 在命令行中运行:
// coffee -b -c script.coffee > script.js
如果你使用的是一个构建工具或者自动化工具(如 Gulp、Grunt 等),你可以配置相应的任务来处理这个选项。
例如,在 Gulp 中使用 gulp-coffee
插件:
const gulp = require('gulp');
const coffee = require('gulp-coffee');
gulp.task('scripts', function () {
return gulp.src('src/**/*.coffee')
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('dist'));
});
Jade (Pug)
Jade(现称 Pug)编译器也默认会在生成的 JavaScript 中包含一个 IIFE 包裹顶层代码。不过,你可以通过调整 Pug 的编译选项来控制这一点。
示例代码:
如果你直接在 Pug 文件中嵌入 CoffeeScript,你需要确保 Pug 编译器不添加额外的函数包裹。你可以使用 Pug 的编译选项来实现这一点。
例如,在 Node.js 中使用 pug
模块:
const pug = require('pug');
const compiledFunction = pug.compileFileClient(
'template.pug',
{ compileDebug: false, client: true }
);
console.log(compiledFunction);
这里的关键在于 compileDebug: false
和 client: true
选项,它们可以帮助你更好地控制生成的 JavaScript 代码。
总结
- 对于 CoffeeScript,使用
-b
或者配置构建工具(如 Gulp、Grunt)来确保编译时不添加顶层 IIFE。 - 对于 Jade (Pug),确保在编译时使用适当的选项来控制生成的 JavaScript 代码格式。
希望这些信息能帮助你解决问题!
https://github.com/visionmedia/jade/issues/853 疑难杂症啊. 好像没现成的语法可以用
哈 3Q 这个里面有
:coffee(bare=true)
eat food
这样就可以了
要解决这个问题,可以通过配置 CoffeeScript
的编译选项来实现。默认情况下,CoffeeScript 编译器会在每个文件的顶部添加一个自执行函数,以创建一个新的作用域。然而,有时候我们希望代码不被包裹在一个自执行函数中。
对于 Jade 和 CoffeeScript 的集成问题,可以尝试以下几种方法:
方法1: 使用 -b
参数
您提到已经使用了 -b
参数,但似乎没有达到预期的效果。确保在您的构建工具(如 CodeKit)中正确地设置了这个参数。例如,在命令行中,您可以这样编译 CoffeeScript 文件:
coffee -bc yourfile.coffee
方法2: 修改 .coffee
文件的内容
在您的 .coffee
文件中,您可以手动去掉生成的自执行函数。例如,将:
(function() {
// 你的代码
}).call(this);
改为:
# 你的代码
但这并不是最佳实践,因为这需要手动修改编译后的代码。
方法3: 使用不同的编译工具
如果上述方法都不适用,您可以考虑使用其他编译工具,比如 Gulp 或 Grunt,它们提供了更多的灵活性来定制编译过程。
示例代码
假设您使用的是 Gulp,您可以这样配置来去掉顶层的自执行函数:
const gulp = require('gulp');
const coffee = require('gulp-coffee');
gulp.task('scripts', function() {
return gulp.src('src/**/*.coffee')
.pipe(coffee({bare: true}))
.pipe(gulp.dest('dist'));
});
通过这种方式,您可以确保 CoffeeScript 文件在编译时不会被包裹在一个自执行函数中。
总结
通过正确设置编译选项或使用更灵活的构建工具,您可以去掉 CoffeeScript 文件中的顶层自执行函数。如果上述方法都不可行,考虑手动调整生成的代码或者寻找替代方案。