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


4 回复

针对你提到的问题,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: falseclient: true 选项,它们可以帮助你更好地控制生成的 JavaScript 代码。

总结

  1. 对于 CoffeeScript,使用 -b 或者配置构建工具(如 Gulp、Grunt)来确保编译时不添加顶层 IIFE。
  2. 对于 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 文件中的顶层自执行函数。如果上述方法都不可行,考虑手动调整生成的代码或者寻找替代方案。

回到顶部