对此我的解决方案是,如果有符号链接,则有条件地为导入设置别名。
在我的项目中,我的依赖项 package-a 在根目录上发布,而本地版本(符号链接)具有要在 package-a/dist 上发布的文件
在我的 webpack 配置中,我有以下内容:
// Check if package is symlinked, i.e. symlink path exists
const isPackageASymlinked = fs.existsSync(path.resolve(__dirname, "../node_modules/package-a/dist"))
...
// on my webpack resolve
resolve: {
alias: {
...(isPackageASymlinked && { "package-a": fs.realpathSync(path.resolve(__dirname, "../node_modules/package-a/dist")} )
},
...
}
这样,当符号链接路径存在时,它将有条件地添加别名。
一个更通用、更少 ES6 的版本:
// package name -> node_modules symlink path
const SYMLINKED_DEP_PATHS = {
"package-a": "package-a/dist"
}
const symlinkInternalAlias = () => _.reduce(SYMLINKED_DEP_PATHS, (acc, symlinkPath, package) => {
const resolvedPath = path.resolve(__dirname, `../node_modules/${symlinkPath}`)
if (fs.existsSync(resolvedPath)) {
acc[package] = fs.realpathSync(resolvedPath)
}
return acc
}, {})
//and then just need to add to the alias
resolve: {
alias: {
...symlinkInternalAlias()
},
...
}
有了这个,您不必更改导入并将它们保留为
import { something } from "package-a/anotherFile.js"