首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用require.js优化时杏仁的绝对路径

使用require.js优化时杏仁的绝对路径
EN

Stack Overflow用户
提问于 2015-06-10 14:24:00
回答 1查看 445关注 0票数 1

我试图让我的代码优化为一个单一的文件,显然是一个非标准的设置,我正在努力理解所有不同的路径意味着什么。

想象一下,我正在制作一种包括杏仁在内的r 命令行工具变体。所以我想用我的工具附带的杏仁包起来。

我的目录结构

代码语言:javascript
复制
someAppFolder
|
+--main.js

在相关文件夹中

代码语言:javascript
复制
myRPlusAlmondBuilder
|
+--myRPlusAlmonBuilder.js
|
+--node_modules
   |
   +--almond
   |  |
   |  +--almond.js
   |
   +--requirejs
      |
      ...

因此,我希望myRPlusAlmondBuilder能够像这样从main.js构建一个JS包

代码语言:javascript
复制
cd myRPlusAlmondBuilder
node myRPlusAlmondBuilder.js someAppFolder/main.js

这里有一个简单的myRPlusAlmondBuilder.js

代码语言:javascript
复制
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);
});

像这样叫它

代码语言:javascript
复制
cd myRPlusAlmondBuilder.js
node myRPlusAlmondBuilder.js /Users/gregg/temp/delme-requirejs/someAppFolder/main.js

但我得到

代码语言:javascript
复制
{
  "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尝试这些其他值都失败了

代码语言:javascript
复制
// 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“的

代码语言:javascript
复制
[Error: Error: ENOENT, no such file or directory '/Users/gregg/temp/delme-requirejs/someAppFolder/node_modules/almond/almond.js'
at Error (native)
]

有完整路径的人

代码语言:javascript
复制
[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到杏仁的相对路径

代码语言:javascript
复制
name: path.relative(dirname, path.join(__dirname, "node_modules/almond/almond.js")),

但是,如果C:/somefolder/myRPlusAlmond中的工具和D:/someAppFolder/main.js中的文件在windows中工作,那么这在windows中是行不通的。

有没有办法对杏仁使用绝对路径?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-06 16:22:32

我找到了一种方法,就是给杏仁加一条路。

代码语言:javascript
复制
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"),
  }.
};

看起来有点烦人,因为我不得不希望自己不要与用户选择的名字发生冲突。当然不太可能发生冲突

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30759217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档