我想要求我的文件总是通过我的项目的根,而不是相对于当前模块。
例如,如果查看https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js第6行,您将看到
express = require('../../')
在我看来,这真的很糟糕。假设我想让我所有的例子都只靠近根结点一层。这是不可能的,因为我必须更新超过30个例子,并且在每个例子中更新很多次。:
express = require('../')
我的解决方案是有一个基于根的特殊情况:如果字符串以$开头,那么它相对于项目的根文件夹。
任何帮助都是感激的,谢谢
更新2
现在我使用require.js,它允许你以一种方式编写,在客户端和服务器上都可以工作。Require.js还允许你创建自定义路径。
更新3
现在我转移到webpack + gulp,我使用enhanced-require来处理服务器端模块。看这里的基本原理:http://hackhat.com/p/110/module-loader-webpack-vs-requirejs-vs-browserify/
在简单的行中,你可以调用自己的文件夹为module:
为此,我们需要:global和app-module-path module
这里“App-module-path”是模块,它允许你添加额外的目录到Node.js模块搜索路径
global的意思是,你附加到这个对象的任何东西b在你的应用中都是可用的。
现在看一下这个片段:
global.appBasePath = __dirname;
require('app-module-path').addPath(appBasePath);
__dirname为节点当前运行目录。您可以在这里给出自己的路径来搜索模块的路径。
另一个答案是:
想象一下这个文件夹结构:
node_modules
lodash
src
子目录
foo.js
bar.js
main.js
测试
. js
然后在test.js中,你需要这样的文件:
const foo = require("../src/subdir/foo");
const bar = require("../src/subdir/bar");
const main = require("../src/main");
const _ = require("lodash");
在main.js中:
const foo = require("./subdir/foo");
const bar = require("./subdir/bar");
const _ = require("lodash");
现在你可以使用。babelrc文件中的babel和babel插件模块解析器来配置两个根文件夹:
{
"plugins": [
["module-resolver", {
"root": ["./src", "./src/subdir"]
}]
]
}
现在你可以在测试和src中以同样的方式要求文件:
const foo = require("foo");
const bar = require("bar");
const main = require("main");
const _ = require("lodash");
如果你想使用es6模块语法:
{
"plugins": [
["module-resolver", {
"root": ["./src", "./src/subdir"]
}],
"transform-es2015-modules-commonjs"
]
}
然后像这样在测试和SRC中导入文件:
import foo from "foo"
import bar from "bar"
import _ from "lodash"
我认为你不需要用你描述的方式来解决这个问题。如果您想在大量文件中更改相同的字符串,请使用sed。在你的例子中,
find . -name "*.js" -exec sed -i 's/\.\.\/\.\.\//\.\.\//g' {} +
/../变成了../
或者,您可以要求配置文件存储包含库路径的变量。如果您将以下文件存储为config.js在示例目录中
var config = {};
config.path = '../../';
在你的例子文件中
myConfiguration = require('./config');
express = require(config.path);
您将能够从一个文件控制每个示例的配置。
这只是个人喜好。
在简单的行中,你可以调用自己的文件夹为module:
为此,我们需要:global和app-module-path module
这里“App-module-path”是模块,它允许你添加额外的目录到Node.js模块搜索路径
global的意思是,你附加到这个对象的任何东西b在你的应用中都是可用的。
现在看一下这个片段:
global.appBasePath = __dirname;
require('app-module-path').addPath(appBasePath);
__dirname为节点当前运行目录。您可以在这里给出自己的路径来搜索模块的路径。