假设我有一个叫app。js的文件。很简单:

var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
  res.render('index', {locals: {
    title: 'NowJS + Express Example'
  }});
});

app.listen(8080);

如果我在“tools.js”中有一个函数。我如何将它们导入到apps.js中使用?

还是……我应该把“工具”变成一个模块,然后需要它吗?<<似乎很难,我宁愿做tools.js文件的基本导入。


当前回答

比如你有一个abc.txt文件或者更多?

创建两个文件:fileread.js和fetchingfile.js,然后在fileread.js中编写以下代码:

function fileread(filename) {
    var contents= fs.readFileSync(filename);
        return contents;
    }

    var fs = require("fs");  // file system

    //var data = fileread("abc.txt");
    module.exports.fileread = fileread;
    //data.say();
    //console.log(data.toString());
}

在fetchingfile.js中编写以下代码:

function myerror(){
    console.log("Hey need some help");
    console.log("type file=abc.txt");
}

var ags = require("minimist")(process.argv.slice(2), { string: "file" });
if(ags.help || !ags.file) {
    myerror();
    process.exit(1);
}
var hello = require("./fileread.js");
var data = hello.fileread(ags.file);  // importing module here 
console.log(data.toString());

现在,在终端中: $ node fetchingfile.js——file=abc.txt

你将文件名作为参数传递,并且在readfile.js中包含所有文件而不是传递它。

谢谢

其他回答

Node基于commonjs模块和最近的esm模块工作。基本上,你应该在独立的.js文件中创建模块,并使用导入/导出(module. js)。导出和要求)。

基于作用域,浏览器上的Javascript工作方式不同。有全局作用域,通过clojures(其他函数中的函数)可以获得私有作用域。

因此,在node中,导出将在其他模块中使用的函数和对象。

我也在寻找一个选项,包括代码而不编写模块,respp。为Node.js服务使用来自不同项目的相同测试独立源- jmparattes回答为我做了这件事。

这样做的好处是,您不会污染名称空间,我不会遇到“使用严格”的问题;而且效果很好。

以下是完整的样本:

加载脚本- /lib/foo.js

"use strict";

(function(){

    var Foo = function(e){
        this.foo = e;
    }

    Foo.prototype.x = 1;

    return Foo;

}())

SampleModule - index.js

"use strict";

const fs = require('fs');
const path = require('path');

var SampleModule = module.exports = {

    instAFoo: function(){
        var Foo = eval.apply(
            this, [fs.readFileSync(path.join(__dirname, '/lib/foo.js')).toString()]
        );
        var instance = new Foo('bar');
        console.log(instance.foo); // 'bar'
        console.log(instance.x); // '1'
    }

}

希望这对你有所帮助。

创建两个js文件

// File cal.js
module.exports = {
    sum: function(a,b) {
        return a+b
    },
    multiply: function(a,b) {
        return a*b
    }
};

js主文件

// File app.js
var tools = require("./cal.js");
var value = tools.sum(10,20);
console.log("Value: "+value);

控制台输出

Value: 30

要在Unix环境中交互式地测试模块./test.js,可以使用这样的代码:

    >> node -e "eval(''+require('fs').readFileSync('./test.js'))" -i
    ...

您不需要新的函数或新的模块。 如果不想使用命名空间,只需执行正在调用的模块。

在tools.js

module.exports = function() { 
    this.sum = function(a,b) { return a+b };
    this.multiply = function(a,b) { return a*b };
    //etc
}

在app.js

或任何其他。js,如myController.js:

而不是

Var tools = require('tools.js'),这迫使我们使用命名空间并调用工具,如tools.sum(1,2);

我们可以简单地调用

require('tools.js')();

然后

sum(1,2);

在我的情况下,我有一个文件与控制器ctrl .js

module.exports = function() {
    this.Categories = require('categories.js');
}

和我可以使用类别在每个上下文后的公共类require('ctrls.js')()