在LiveScript中使用prelude-ls

时间:2014-09-15 12:38:58

标签: javascript livescript prelude.ls

我只需要在LiveScript中使用prelude-ls库,但不需要在REPL中使用。在我的小测试中,我有4个文件:

  • main.htm中
  • application.ls
  • 的application.js
  • require.js

我有最新版本的require.js(2.1.15),在main.htm我加载了脚本:

<!DOCTYPE html>
<html>
    <head>
        <script src="./require.js" type="text/javascript"></script>
        <script src="./prelude.js" type="text/javascript"></script>
    </head>
    <body>

    </body>
</html>

然后,我转到我的application.ls进行测试:

require! 'prelude-ls'

[1 2 3] |> prelude-ls.map (* 2)

我的编译命令是:

lsc -cwd $myFilePath 它编译得很好。然后,我去那里得到最终结果,测试并收到以下错误:

Uncaught Error: Module name "prelude-ls" has not been loaded yet for context: _. Use require([])

好吧,我看到这是一个非常常见的错误,它的更正将发生在 js 文件中,而不是 ls 中,并且我所遵循的链接都没有解决我的问题。我已经在2台计算机上试过了它并得到了相同的结果。

我的最终js文件application.js是:

// Generated by LiveScript 1.2.0
(function(){
  var preludeLs;
  preludeLs = require('prelude-ls');
  preludeLs.map((function(it){
    return it * 2;
  }))(
  [1, 2, 3]);
}).call(this);

Plase,尽可能帮助我。我真的阅读了所有关于lifecript的文档,并且它首先引用了prelude-ls。

2 个答案:

答案 0 :(得分:1)

我认为你混淆了AMD.js(这里是Require.JS)和CommonJS。

。使用

require(['dep1', 'dep2'], function (dep1, dep2) {
  dep1.callSomething();
});

(这允许异步加载)

另一方面,CommonJS(prelude-ls使用的)基本上是节点所做的(以及我们使用require!生成的内容):

var preludeLs = require('prelude-ls')

答案 1 :(得分:0)

起初我不明白,我发现答案令人困惑,尽管是正确的。请让我总结一下。

实际上它非常简单并且有效as says the doc

我们必须使用npm或bower安装prelude-ls。我们需要包含文件prelude-browser.jsprelude-ls/browser/prelude-browser.js)。

然后我们只需在代码的开头加上序言:

prelude = require 'prelude-ls'

我们可以致电prelude.sum

第二种选择是完全导入我们需要的功能,如下所示:

{map, filter, lines} = require 'prelude-ls'

所以我们可以直接打电话给他们。

这适用于gulp和angularjs FYI。

This answer很清楚。