2017-02-26 147 views
1

當開發一個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 
    } 
} 

但是,你可以想像,這導致在瀏覽器警告消息。

雖然我意識到這個問題的原因,理想情況下,我想壓制錯誤。

回答

0

我相信這不會是一個非常受歡迎的問題,在這種情況下,這是一個不會引起任何警告消息的好選擇,這對於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目錄。

希望這可以幫助別人在未來!