解决未解决的npm链接符号链接需要?

问题描述:

当开发一个NPM包,这是常见的使用方法:解决未解决的npm链接符号链接需要?

npm link 

它允许修改<myPackage>下发展,而无需发布和取消发布所有的时间!开发人员可以在本地进行任何更改并立即查看。

它安装到一个项目中使用:

npm link <myPackage> 

这是伟大的,但有一个问题,如果<myPackage>有需要(路径)。

例如,它将使用<myPackage>的真实位置作为__dirname,而不是符号链接的预期位置,它应该是项目的本地位置,就像常规的node_module一样。

我发现到目前为止,对于我的具体情况解决办法正常工作:

module.exports = { 
    loadImage: function (filename) { 
    var img 
    if (typeof window !== 'undefined' && ({}).toString.call(window) === '[object Window]') { 
     try { 
     img = require('../../src/images/' + filename) 
     } catch (e) { 
     // Development only 
     img = require('./template/src/images/' + filename) 
     } 
    } else { 
     img = '/assets/images/' + filename 
    } 
    return img 
    } 
} 

但是,你可以想像,这导致在浏览器警告消息。

虽然我意识到这个问题的原因,理想情况下,我想压制错误。

我相信这不会是一个非常受欢迎的问题,在这种情况下,这是一个不会引起任何警告消息的好选择,这对于NPM Package开发阶段来说非常具体。

以下modules.exports提供了一些您想要导入到应用程序中的代码片段。你会找到loadImage方法,以用于需要(路径)回退:

module.exports = { 
    loadImage: function (filename) { 
    if (typeof window !== 'undefined' && ({}).toString.call(window) === '[object Window]') { 
     return (process.env.NPM_PACKAGE_DEV && require('./template/src/images/' + filename) || 
      require('./template/src/images/' + filename)) 
    } else { 
     return '/assets/images/' + filename 
    } 
    }, 
    isBrowser: function() { 
    return (typeof window !== 'undefined' && ({}).toString.call(window) === '[object Window]') 
    } 
} 

什么好的这个,就是你可以通过运行命令设置的NPM_PACKAGE_DEV,比初始化节点服务器(OSX终端语法):

export NPM_PACKAGE_DEV=1 && node server.js 

如果省略NPM_PACKAGE_DEV中,require()则退回到最终使用的道路,那就是相对于项目node_modules目录。

希望这可以帮助别人在未来!