使用 require.js 优化时杏仁的绝对路径
Absolute path for almond when using require.js optimize
我正在尝试使用显然是非标准的设置来让我的代码优化为单个文件,并且我正在努力理解所有不同路径的含义。
假设我正在制作 r
the requirejs command-line tool 的变体,其中包括杏仁。所以我希望能够使用我的工具附带的杏仁包裹杏仁。
我的目录结构
someAppFolder
|
+--main.js
在相关文件夹中
myRPlusAlmondBuilder
|
+--myRPlusAlmonBuilder.js
|
+--node_modules
|
+--almond
| |
| +--almond.js
|
+--requirejs
|
...
所以,我希望 myRPlusAlmondBuilder
能够像这样 main.js
构建单个 JS 包
cd myRPlusAlmondBuilder
node myRPlusAlmondBuilder.js someAppFolder/main.js
这是一个简单的 myRPlusAlmondBuilder.js
var requirejs = require('requirejs');
var path = require('path');
var filename = process.argv[2];
var dirname = path.dirname(filename);
var barename = path.basename(filename, ".js");
var config = {
baseUrl: dirname,
name: "node_modules/almond/almond",
include: barename,
insertRequire: [barename],
out: "out.js",
wrap: true,
};
// show the values
console.log(JSON.stringify(config, undefined, " "));
requirejs.optimize(config, function() {
console.log("result is in:", config.out);
}, function(err) {
console.error(err);
});
这样称呼
cd myRPlusAlmondBuilder.js
node myRPlusAlmondBuilder.js /Users/gregg/temp/delme-requirejs/someAppFolder/main.js
但我明白了
{
"baseUrl": "/Users/gregg/temp/delme-requirejs/someAppFolder",
"name": "node_modules/almond/almond",
"include": "main",
"insertRequire": [
"main"
],
"out": "out.js",
"wrap": true
}
{ [Error: Error: ERROR: module path does not exist: /Users/gregg/temp/delme-requirejs/someAppFolder/node_modules/almond/almond.js for module named: node_modules/almond/almond. Path is relative to: /Users/gregg/temp/delme-requirejs/myRPlusAlmondBuilder
为 name
尝试这些其他值都失败了
// dot in front
name: "./node_modules/almond/almond",
// .js on end
name: "node_modules/almond/almond.js",
// .dot in front and .js on end
name: "./node_modules/almond/almond.js",
// absolute path to almond.js with .js
name: path.join(__dirname, "node_modules/almond/almond.js"),
// absolute path to almond.js without .js
name: path.join(__dirname, "node_modules/almond/almond"),
带“.js”的获得
[Error: Error: ENOENT, no such file or directory '/Users/gregg/temp/delme-requirejs/someAppFolder/node_modules/almond/almond.js'
at Error (native)
]
有完整路径的得到
[Error: Error: ENOENT, no such file or directory '/Users/gregg/temp/delme-requirejs/someAppFolder//Users/gregg/temp/delme-requirejs/myRPlusAlmondBuilder/node_modules/almond/almond.js'
at Error (native)
]
使用从 main.js 到 almond 的相对路径有效
name: path.relative(dirname, path.join(__dirname, "node_modules/almond/almond.js")),
但是如果工具在 C:/somefolder/myRPlusAlmond
中并且文件在 D:/someAppFolder/main.js
中,那在 windows 中将不起作用
almond有没有办法使用绝对路径?
我找到了一种方法,就是为杏仁添加路径
var config = {
baseUrl: dirname,
name: "__dontclash_almond__/almond",
include: barename,
insertRequire: [barename],
out: "out.js",
wrap: true,
paths: {
__dontclash_almond__: path.join(__dirname, "node_modules/almond"),
}.
};
似乎有点老套,因为我不得不希望我不会与用户选择的名称发生冲突。当然不太可能发生冲突
我正在尝试使用显然是非标准的设置来让我的代码优化为单个文件,并且我正在努力理解所有不同路径的含义。
假设我正在制作 r
the requirejs command-line tool 的变体,其中包括杏仁。所以我希望能够使用我的工具附带的杏仁包裹杏仁。
我的目录结构
someAppFolder
|
+--main.js
在相关文件夹中
myRPlusAlmondBuilder
|
+--myRPlusAlmonBuilder.js
|
+--node_modules
|
+--almond
| |
| +--almond.js
|
+--requirejs
|
...
所以,我希望 myRPlusAlmondBuilder
能够像这样 main.js
构建单个 JS 包
cd myRPlusAlmondBuilder
node myRPlusAlmondBuilder.js someAppFolder/main.js
这是一个简单的 myRPlusAlmondBuilder.js
var requirejs = require('requirejs');
var path = require('path');
var filename = process.argv[2];
var dirname = path.dirname(filename);
var barename = path.basename(filename, ".js");
var config = {
baseUrl: dirname,
name: "node_modules/almond/almond",
include: barename,
insertRequire: [barename],
out: "out.js",
wrap: true,
};
// show the values
console.log(JSON.stringify(config, undefined, " "));
requirejs.optimize(config, function() {
console.log("result is in:", config.out);
}, function(err) {
console.error(err);
});
这样称呼
cd myRPlusAlmondBuilder.js
node myRPlusAlmondBuilder.js /Users/gregg/temp/delme-requirejs/someAppFolder/main.js
但我明白了
{
"baseUrl": "/Users/gregg/temp/delme-requirejs/someAppFolder",
"name": "node_modules/almond/almond",
"include": "main",
"insertRequire": [
"main"
],
"out": "out.js",
"wrap": true
}
{ [Error: Error: ERROR: module path does not exist: /Users/gregg/temp/delme-requirejs/someAppFolder/node_modules/almond/almond.js for module named: node_modules/almond/almond. Path is relative to: /Users/gregg/temp/delme-requirejs/myRPlusAlmondBuilder
为 name
尝试这些其他值都失败了
// dot in front
name: "./node_modules/almond/almond",
// .js on end
name: "node_modules/almond/almond.js",
// .dot in front and .js on end
name: "./node_modules/almond/almond.js",
// absolute path to almond.js with .js
name: path.join(__dirname, "node_modules/almond/almond.js"),
// absolute path to almond.js without .js
name: path.join(__dirname, "node_modules/almond/almond"),
带“.js”的获得
[Error: Error: ENOENT, no such file or directory '/Users/gregg/temp/delme-requirejs/someAppFolder/node_modules/almond/almond.js'
at Error (native)
]
有完整路径的得到
[Error: Error: ENOENT, no such file or directory '/Users/gregg/temp/delme-requirejs/someAppFolder//Users/gregg/temp/delme-requirejs/myRPlusAlmondBuilder/node_modules/almond/almond.js'
at Error (native)
]
使用从 main.js 到 almond 的相对路径有效
name: path.relative(dirname, path.join(__dirname, "node_modules/almond/almond.js")),
但是如果工具在 C:/somefolder/myRPlusAlmond
中并且文件在 D:/someAppFolder/main.js
almond有没有办法使用绝对路径?
我找到了一种方法,就是为杏仁添加路径
var config = {
baseUrl: dirname,
name: "__dontclash_almond__/almond",
include: barename,
insertRequire: [barename],
out: "out.js",
wrap: true,
paths: {
__dontclash_almond__: path.join(__dirname, "node_modules/almond"),
}.
};
似乎有点老套,因为我不得不希望我不会与用户选择的名称发生冲突。当然不太可能发生冲突