web-infra-dev / rslib

The Rsbuild powered package build tool.
MIT License
346 stars 17 forks source link

[Bug]: Incorrect `import.meta.url` shim for CJS #274

Open chenjiahan opened 3 hours ago

chenjiahan commented 3 hours ago

Version

Rslib 0.0.10

Details

Rslib should inject __rslib_import_meta_url__ before using it. Otherwise there will be an runtime error:

Image

import { createRequire } from 'node:module';

const require = createRequire(import.meta.url);

console.log(require.resolve('stylus-loader'));
"use strict";
var __webpack_exports__ = {};
const external_node_module_namespaceObject = require("node:module");
const src_require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
console.log(src_require.resolve('stylus-loader'));
var __webpack_export_target__ = exports;
for(var i in __webpack_exports__)__webpack_export_target__[i] = __webpack_exports__[i];
if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
    value: true
});
var __rslib_import_meta_url__ = /*#__PURE__*/ function() {
    return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
}();
"use strict";
var __webpack_exports__ = {};
var __rslib_import_meta_url__ = /*#__PURE__*/ function() {
    return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
}();
const external_node_module_namespaceObject = require("node:module");
const src_require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
console.log(src_require.resolve('stylus-loader'));
var __webpack_export_target__ = exports;
for(var i in __webpack_exports__)__webpack_export_target__[i] = __webpack_exports__[i];
if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
    value: true
});

Reproduce link

https://github.com/web-infra-dev/rsbuild/pull/3679

Reproduce Steps

  1. cd packages/plugin-stylus
  2. pnpm build
Timeless0911 commented 2 hours ago

https://github.com/web-infra-dev/rslib/blob/228bf3c36debf892d3d679c6e1f691352aed0db9/packages/core/src/plugins/cjsShim.ts#L13-L14

This temporary solution seems that it can not be executed.😂

fi3ework commented 1 hour ago

As a temp implementation solution, I think we can directly inline the shim content through DefinePlugin, although this will increase the bundle size.