代码之家  ›  专栏  ›  技术社区  ›  NVI

将一个文件包含到另一个文件中

  •  1
  • NVI  · 技术社区  · 15 年前

    我正在寻找非常简单的模板脚本来构建JS文件。它应该只做一件事:将一个文件包含到另一个文件中。

    模板(main.js)

    /*> script.js */
    
    var style = "/*> style.css */";
    

    JScript

    var my_script;
    

    样式表

    html, body {margin:0; padding:0}
    .my-style {background: #fffacc}
    

    输出

    var my_script;
    
    var style = "html, body {margin:0; padding:0}\
    .my-style {background: #fffacc}";
    

    我已经做了 cat main.js | sed -e 's!/\*> \(.*\) \*/!cat \1!g' . 输出:

    cat script.js
    
    var style = "cat style.css";
    

    如何制作 cat \1 实际工作?

    我将使用它来构建userjs(greasemonkey脚本)。我的存储库中有几个JS和CSS文件。我想把它们分开。但结果脚本必须只有一个,所以我需要将所有JS和CSS文件合并到其中。

    我可以使用sed、awk、perl或ruby。


    最后,我已经 js-preprocessor .谢谢你们!

    3 回复  |  直到 15 年前
        1
  •  1
  •   Ciarán Walsh    15 年前

    这个的预期用途是什么?javascript不支持多行字符串,因此 style 变量定义将导致模板扩展后出现语法错误。

    编辑:我的错误是“我错过了您的示例扩展包括 \ 继续。不过,这会使扩展过程复杂化;如果您能更详细地了解一下计划在哪里使用它,以及可用的工具等,那就更好了。

    Ruby中的一个例子:

    ruby <main.js -pe'$_.gsub!(%r{/\*>\s*(.+?)\s*\*/}) { File.read($1) }'
    
        2
  •  4
  •   Roger Pate    15 年前

    有三个明显的解决方案:

    1. 不要使用任何类型的include指令,只需指定文件的顺序。这可以让你使用一个简单的 cat file1 file2 file3 > output 获取最终结果的语句。
    2. 使用现有的预处理器,如C预处理器( cpp 但是要注意它可能如何与JS交互。但是,您也可以使用它,通过在“headers”中定义宏来实现这一点,正如在C中所做的那样,创建自己的库。
    3. 编写一个简单的预处理器,它可以完全满足您的需要。如果您只想支持include-like指令,这并不难。

    不明显的解决方案可能使用一些特定的JavaScript引擎,它允许您添加钩子或插件来支持文件包含、输出结果代码,或者完全使用其他方法。

        3
  •  0
  •   paradigmatic    15 年前

    我也会用Ruby,但我建议 erb 它包含在ruby stdlib中。如果您想添加更复杂的特性,它允许扩展性。

    在这种情况下,您可以编写以下方法:

    def include_file(filename)
      File.open( filename, "r" ) { |f| f.read }
    end
    

    然后从模板中使用它:

    <% include_file "script.js"  %>
    var style = "<% include_file "style.css"  %>";
    

    它只是起作用…