如何在我的主项目中使用我的私有npm包

时间:2015-02-05 21:21:46

标签: node.js npm

我正在创建私人npm并使用sinopia在this的帮助下将其发布到我的本地npm存储库

.storage树位于

之下
C:\sinopia
    \ storage
      \privateProj
          package.json
          privateProj1.0.1.taz

我的主要项目位置我运行了以下命令

npm install privateProj --save

它将更新package.json就像下面的

   {
  "name": "privateprojectClient",
  "version": "1.0.0",
  "description": "",
  "main": "myApp.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "privateProj": "^1.0.1"
  }
}

并在imag之后将privateProj下载到nodemodule文件夹reffer enter image description here 然后我尝试运行节点myapp.js 它显示以下消息

I:\NodeJSProject\privateprojectClient>node myApp.js

module.js:340
    throw err;
          ^
Error: Cannot find module '/node_modules/privateProj'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (I:\NodeJSProject\privateprojectClient\myApp.js:5:10)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

请帮我解决这个问题。

privatePro / app.js中的代码是

var db = require('diskdb');

db.connect('./examples/db', ['articles','comments','users']);

var article1 = {
    title : 'diskDB rocks',
    published : 'today',
    rating : '5 stars'
}

var article2 = {
    title : 'diskDB rocks',
    published : 'yesterday',
    rating : '5 stars'
}

var article3 = {
    title : 'diskDB rocks',
    published : 'today',
    rating : '4 stars'
}
db.articles.save([article1, article2, article3]);

var articleComments = {
    title: 'diskDB rocks',
    published: '2 days ago',
    comments: [{
        name: 'a user',
        comment: 'this is cool',
        rating: 2
    }, {
        name: 'b user',
        comment: 'this is ratchet',
        rating: 3
    }, {
        name: 'c user',
        comment: 'this is awesome',
        rating: 2
    }]
}

db.comments.save(articleComments);



var printFruits = function() {
    console.log(db.articles.find());
}

// To test the app locally
 //npm publishprintFruits(); // << uncomment this
// and run
// $ node app.js

exports.printFruits = printFruits;

2 个答案:

答案 0 :(得分:1)

Node&#34;要求&#34;默认情况下,函数将在node_modules中查找,尝试

require('privateProj');

并将node_modules / privateProj / app.js重命名为node_modules / privateProj / index.js

还可以从

更改模块代码(privateProj代码)
exports.printFruits = printFruits;

module.exports = printFruits;

还注意到您在myApp.js更改

中导出该函数
pp.printFruits();

pp();

答案 1 :(得分:0)

首先 - 您不需要设置npm模块的完整路径,您只需要(&#39; moduleName&#39;)。 第二个(在您的情况下是主要问题) - 您设置了绝对路径,这就是您的脚本无法找到它的原因。 所以只使用require(moduleName)
(可选)详细了解需要如何工作here