1

在开发 NPM 包时,通常使用:

npm link

它允许<myPackage>在开发中进行修改,而无需一直发布和取消发布!开发人员可以在本地进行任何更改并立即查看。

它通过以下方式安装到项目中:

npm link <myPackage>

很好,但是如果<myPackage>有一个 require(path) 就会出现问题。

例如,它将使用 __dirname 的真实位置<myPackage>,而不是符号链接的预期位置,它应该是项目的本地位置,就像常规的 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
  }
}

但正如您可以想象的那样,这会导致浏览器中出现警告消息。

虽然我知道这个问题的原因,但理想情况下,我想抑制错误。

4

1 回答 1

0

我相信这不会是一个非常受欢迎的问题,在这种情况下,这是一个不错的选择,它不会引起任何警告消息,并且非常特定于 NPM 包开发阶段。

以下 modules.exports 公开了一些您希望导入应用程序的代码片段。您将找到该loadImage方法,其中包含 require(path) 的后备:

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 目录。

希望这对将来的其他人有所帮助!

于 2017-02-27T00:39:19.877 回答