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

时间:2017-07-21 09:48:14

标签: node.js npm rollupjs

我遇到了Rollup和rollup-plugin-node-resolve的问题。

如果我有这种导入:

import _ from 'lodash';

它会转换为:

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

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

我已将所有node_modules定义为external

这是我的相关配置:

{
  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' ] },
    }),
  ],
}

如何使构建保持节点模块导入保留绝对路径?我想在编写时保留它们,以便node.js / webpack / wathever可以正确解析导入。

1 个答案:

答案 0 :(得分:1)

您希望在解决之前将[{Premium=203.05, Id=1000101}, {Premium=205.36, Id=1000102}, {Premium=207.67, Id=1000103}, {Premium=209.98, Id=1000104}, {Premium=212.29, Id=1000105}] 标记为外部

lodash

将所有依赖项标记为外部的好方法是使用package.json文件中的{ entry: 'dist/components-index.js', external: ['lodash', ...], plugins: [ resolve({ extensions: ['.jsx', '.js', '.json'], }), commonjs({ namedExports: { '../xxx-styles/lib/index.js': ['common', 'dark', 'light' ] }, }), ], } 字段:

"dependencies"

由于您将// 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插件 - 如果您明确了解文件扩展名(Rollup可能会在附近保留这些文件扩展名)未来,为了增加与浏览器中的本机模块加载器的兼容性,您将不需要它。