当前位置: 首页 > 知识库问答 >
问题:

汇总用相对路径替换节点模块导入

冷正信
2023-03-14

我有一个问题与汇总和汇总插件节点解决。

如果我有这种类型的进口:

import _ from 'lodash';

它被转换为:

import _ from '../node_modules/lodash/lib/index.js';

当我尝试在使用Webpack的项目中使用它时,这会破坏捆绑包,因为node_modules文件夹显然不是我的Rollup-bundled包的文件夹的子文件夹(因为npm平坦了依赖项)。

我已经将所有的node_modules定义为外部

这是我的相关配置:

{
  entry: 'dist/components-index.js',
  external: id => id.indexOf('node_modules') >= 0,
  plugins: [
    resolve({
      extensions: ['.jsx', '.js', '.json'],
    }),
    commonjs({
      namedExports: { '../xxx-styles/lib/index.js': ['common', 'dark', 'light' ] },
    }),
  ],
}

如何使构建保持节点模块导入保持绝对路径?我想在写的时候保存它们,这样节点。js/webpack/wathever可以正确解析导入。

共有1个答案

常炯
2023-03-14

在解析之前,要将lodash标记为外部:

{
  entry: 'dist/components-index.js',
  external: ['lodash', ...],
  plugins: [
    resolve({
      extensions: ['.jsx', '.js', '.json'],
    }),
    commonjs({
      namedExports: { '../xxx-styles/lib/index.js': ['common', 'dark', 'light' ] },
    }),
  ],
}

将所有依赖项标记为外部依赖项的一个好方法是使用包中的“dependencies”字段。json文件:

// rollup.config.js
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import pkg from './package.json';

export default {
  entry: 'dist/components-index.js',
  external: Object.keys(pkg.dependencies),
  plugins: [
    resolve({
      extensions: ['.jsx', '.js', '.json'],
    }),
    commonjs({
      namedExports: { '../xxx-styles/lib/index.js': ['common', 'dark', 'light' ] },
    }),
  ],
}

由于您正在将node_modules中的所有内容标记为外部,我建议您不要使用resolve插件——如果您明确表示文件扩展名(为了增加与浏览器中本机模块加载程序的兼容性,Rollup可能会在不久的将来坚持使用该插件),那么您就不需要它了。

 类似资料:
  • 问题内容: 给定相对路径,如何导入Python模块? 例如,如果包含和,和包含,我怎么导入到? 这是一个视觉表示: 希望包含,但是重组文件夹层次结构不是一种选择。 问题答案: 假设你的两个目录都是真实的Python包(文件中确实有文件),那么这是一个相对于脚本位置包含模块的安全解决方案。 我假设你想这样做,因为你需要在脚本中包括一组模块。我在多个产品的生产环境中使用了此功能,并在许多特殊情况下工作

  • 问题内容: 我正在python 2.7中开发自己的模块。它位于而不是或中。内部结构为: 包括课程。我遇到导入问题: 我没有将PythonPath设置为包括我的,因此,当server.http尝试包含client.PyCachedClient时,它将尝试从相对路径加载它并失败。我的问题是- 我应该如何以良好的pythonic方式设置所有路径/设置?我知道每次打开控制台并尝试运行服务器时都可以在she

  • 过去,每当我想在Node.js应用程序中拥有相对路径时,我都会使用。如果我通过格式使用ES模块,在某个目录路径变为相对路径时,我如何具有相同的功能? 另一种方法是,我是否能够将别名分配给目录,使所有相对路径都与该别名相关,就像是相对于当前目录的路径的别名一样。

  • 问题 将代码组织成包,想用import语句从另一个包名没有硬编码过的包中导入子模块。 解决方案 使用包的相对导入,使一个模块导入同一个包的另一个模块 举个例子,假设在你的文件系统上有mypackage包,组织如下: mypackage/ __init__.py A/ __init__.py spam.py grok.py B/

  • 有一个简单的汇总配置,像这样。 我想用rollup来构建node_模块并将它们放入捆绑包,但我得到了一个错误,jsx出现了一个错误,似乎它无法处理jsx语法,但是如果我不在babel插件中包含node_模块,它就可以正常工作。那么,使用rollup构建节点_模块的正确方法是什么?

  • rank ▲ ✰ vote url 53 400 168 184 url 从相对路径引入一个模块 怎么用相对路径引入一个模块? 例如,如果dirFoo包含Foo.py和dirBar,而dirBar包含Bar.py,怎么样才能在Foo.py里引入Bar.py? 结构: dirFoo\ Foo.py dirBar\ Bar.py Foo希望包含Bar,但是重新组织文件