mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.2 KiB
65 lines
2.2 KiB
// Flags: --preserve-symlinks
|
|
'use strict';
|
|
// Refs: https://github.com/nodejs/node/pull/5950
|
|
|
|
// This test verifies that symlinked modules are able to find their peer
|
|
// dependencies when using the --preserve-symlinks command line flag.
|
|
|
|
// This test passes in v6.2+ with --preserve-symlinks on and in v6.0/v6.1.
|
|
// This test will fail in Node.js v4 and v5 and should not be backported.
|
|
|
|
const common = require('../common');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const assert = require('assert');
|
|
|
|
common.refreshTmpDir();
|
|
|
|
const tmpDir = common.tmpDir;
|
|
|
|
// Creates the following structure
|
|
// {tmpDir}
|
|
// ├── app
|
|
// │ ├── index.js
|
|
// │ └── node_modules
|
|
// │ ├── moduleA -> {tmpDir}/moduleA
|
|
// │ └── moduleB
|
|
// │ ├── index.js
|
|
// │ └── package.json
|
|
// └── moduleA
|
|
// ├── index.js
|
|
// └── package.json
|
|
|
|
const moduleA = path.join(tmpDir, 'moduleA');
|
|
const app = path.join(tmpDir, 'app');
|
|
const moduleB = path.join(app, 'node_modules', 'moduleB');
|
|
const moduleA_link = path.join(app, 'node_modules', 'moduleA');
|
|
fs.mkdirSync(moduleA);
|
|
fs.mkdirSync(app);
|
|
fs.mkdirSync(path.join(app, 'node_modules'));
|
|
fs.mkdirSync(moduleB);
|
|
|
|
// Attempt to make the symlink. If this fails due to lack of sufficient
|
|
// permissions, the test will bail out and be skipped.
|
|
try {
|
|
fs.symlinkSync(moduleA, moduleA_link);
|
|
} catch (err) {
|
|
if (err.code !== 'EPERM') throw err;
|
|
common.skip('insufficient privileges for symlinks');
|
|
return;
|
|
}
|
|
|
|
fs.writeFileSync(path.join(moduleA, 'package.json'),
|
|
JSON.stringify({name: 'moduleA', main: 'index.js'}), 'utf8');
|
|
fs.writeFileSync(path.join(moduleA, 'index.js'),
|
|
'module.exports = require(\'moduleB\');', 'utf8');
|
|
fs.writeFileSync(path.join(app, 'index.js'),
|
|
'\'use strict\'; require(\'moduleA\');', 'utf8');
|
|
fs.writeFileSync(path.join(moduleB, 'package.json'),
|
|
JSON.stringify({name: 'moduleB', main: 'index.js'}), 'utf8');
|
|
fs.writeFileSync(path.join(moduleB, 'index.js'),
|
|
'module.exports = 1;', 'utf8');
|
|
|
|
assert.doesNotThrow(() => {
|
|
require(path.join(app, 'index'));
|
|
});
|
|
|