From 2ba7a3e70488522adb868460b82df5bf08e32b7f Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 14:27:11 -0700 Subject: [PATCH 1/7] fix build to use require.resolve where appropriate --- .../src/pages/GetStarted/GetStartedPage.tsx | 2 +- .../src/pages/HomePage/HomePage.tsx | 4 +-- .../src/pages/Styles/IconsPage/IconsPage.tsx | 2 +- scripts/tasks/copy.js | 33 +++++++++++++++++-- scripts/tasks/jest-resources.js | 4 +-- scripts/tasks/jest.js | 2 +- scripts/tasks/sass.js | 14 +++++++- scripts/tasks/ts.js | 2 +- scripts/tasks/tslint.js | 2 +- scripts/tasks/webpack-resources.js | 5 +-- 10 files changed, 54 insertions(+), 16 deletions(-) diff --git a/apps/fabric-website/src/pages/GetStarted/GetStartedPage.tsx b/apps/fabric-website/src/pages/GetStarted/GetStartedPage.tsx index 3fed74a80af96b..eedbd903c6e145 100644 --- a/apps/fabric-website/src/pages/GetStarted/GetStartedPage.tsx +++ b/apps/fabric-website/src/pages/GetStarted/GetStartedPage.tsx @@ -8,7 +8,7 @@ const diagramStyles: any = require('./GetStartedPage.diagram.module.scss'); import * as stylesImport from './GetStartedPage.module.scss'; const styles: any = stylesImport; const pageStyles: any = require('../PageStyles.module.scss'); -const corePackageData = require('../../../node_modules/office-ui-fabric-core/package.json'); +const corePackageData = require('office-ui-fabric-core/package.json'); const corePackageVersion: string = corePackageData && corePackageData.version || '9.2.0'; export class GetStartedPage extends React.Component { diff --git a/apps/fabric-website/src/pages/HomePage/HomePage.tsx b/apps/fabric-website/src/pages/HomePage/HomePage.tsx index b16d12b01cd386..29982fa7ca5021 100644 --- a/apps/fabric-website/src/pages/HomePage/HomePage.tsx +++ b/apps/fabric-website/src/pages/HomePage/HomePage.tsx @@ -3,8 +3,8 @@ import { css } from 'office-ui-fabric-react/lib/Utilities'; import * as stylesImport from './HomePage.module.scss'; const styles: any = stylesImport; -const corePackageData = require('../../../node_modules/office-ui-fabric-core/package.json'); -const reactPackageData = require('../../../node_modules/office-ui-fabric-react/package.json'); +const corePackageData = require('office-ui-fabric-core/package.json'); +const reactPackageData = require('office-ui-fabric-react/package.json'); export class HomePage extends React.Component { public render(): JSX.Element { diff --git a/apps/fabric-website/src/pages/Styles/IconsPage/IconsPage.tsx b/apps/fabric-website/src/pages/Styles/IconsPage/IconsPage.tsx index 194928696fcbe1..2edd769d09811f 100644 --- a/apps/fabric-website/src/pages/Styles/IconsPage/IconsPage.tsx +++ b/apps/fabric-website/src/pages/Styles/IconsPage/IconsPage.tsx @@ -7,7 +7,7 @@ import * as stylesImport from './IconsPage.module.scss'; const styles: any = stylesImport; const pageStyles: any = require('../../PageStyles.module.scss'); -const iconData = require('../../../../node_modules/office-ui-fabric-core/src/data/icons.json'); +const iconData = require('office-ui-fabric-core/src/data/icons.json'); export class IconsPage extends React.Component { public render(): JSX.Element { diff --git a/scripts/tasks/copy.js b/scripts/tasks/copy.js index f9e543d210d7c8..fd3ee6367ef5d1 100644 --- a/scripts/tasks/copy.js +++ b/scripts/tasks/copy.js @@ -1,10 +1,39 @@ +// @ts-check +const path = require('path'); + +/** + * Handles resolve like require.resolve but respects the glob patterns + * @param {string} pattern + */ +function expandSourcePath(pattern) { + if (!pattern) { + return null; + } + + // just returns the relative paths + if (pattern.startsWith('.')) { + return pattern; + } + + // tries to resolve the packages, handling scoped packages + const splitPattern = pattern.split('/'); + const packageName = pattern[0] == '@' ? `${splitPattern[0]}/${splitPattern[1]}` : splitPattern[0]; + const resolvedPackageJson = require.resolve(`${packageName}/package.json`); + + if (!resolvedPackageJson) { + // returns pattern if the packageName didn't contain a package.json (not really a package) + return pattern; + } + + return pattern.replace(packageName, path.dirname(resolvedPackageJson)); +} module.exports = function (options) { const { logStartTask, logEndTask } = require('../logging'); const path = require('path'); const fs = require('fs'); - configPath = path.resolve(process.cwd(), 'config/pre-copy.json'); + let configPath = path.resolve(process.cwd(), 'config/pre-copy.json'); if (!fs.existsSync(configPath)) { return; @@ -18,7 +47,7 @@ module.exports = function (options) { const sources = config.copyTo[destination]; for (let source of sources) { - source = path.resolve(process.cwd(), source); + source = expandSourcePath(source); destination = path.resolve(process.cwd(), destination); startCopy(source, destination); } diff --git a/scripts/tasks/jest-resources.js b/scripts/tasks/jest-resources.js index 6dbee44865c507..30a1230ebd70cc 100644 --- a/scripts/tasks/jest-resources.js +++ b/scripts/tasks/jest-resources.js @@ -12,13 +12,13 @@ const styleMockPath = createConfig: (customConfig) => merge( { moduleNameMapper: { - 'ts-jest': path.resolve(__dirname, '../node_modules/ts-jest'), + 'ts-jest': require.resolve('ts-jest'), '\\.(scss)$': path.resolve(__dirname, 'jest-style-mock.js'), 'KeyCodes': path.resolve(__dirname, 'jest-mock.js') }, 'transform': { - '.(ts|tsx)': path.resolve(__dirname, '../node_modules/ts-jest/preprocessor.js') + '.(ts|tsx)': require.resolve('ts-jest/preprocessor.js') }, 'reporters': [ diff --git a/scripts/tasks/jest.js b/scripts/tasks/jest.js index a234589a3ee908..60b3be0771a4c0 100644 --- a/scripts/tasks/jest.js +++ b/scripts/tasks/jest.js @@ -7,7 +7,7 @@ module.exports = function (options) { const jestConfigPath = findConfig('jest.config.js'); if (fs.existsSync(jestConfigPath)) { - const jestPath = path.resolve(__dirname, '../node_modules/jest/bin/jest'); + const jestPath = require.resolve('jest/bin/jest'); const customArgs = options && options.argv ? options.argv.slice(3).join(' ') : ''; const args = [ diff --git a/scripts/tasks/sass.js b/scripts/tasks/sass.js index 0b70a00e71f97d..27d42340933c53 100644 --- a/scripts/tasks/sass.js +++ b/scripts/tasks/sass.js @@ -86,11 +86,23 @@ module.exports = function (options) { return source.join('\n'); } + /** + * @param {string} url + * @param {string} prev + * @param {Function} done + */ function patchSassUrl(url, prev, done) { let newUrl = url; if (url[0] === '~') { - newUrl = path.resolve(process.cwd(), 'node_modules', url.substr(1)); + let packageUrl = url.substr(1) + (url.endsWith('.scss') ? '' : '.scss'); + + try { + newUrl = require.resolve(packageUrl); + } catch (e) { + // try again with a private reference + newUrl = require.resolve(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`)); + } } else if (url === 'stdin') { newUrl = ''; diff --git a/scripts/tasks/ts.js b/scripts/tasks/ts.js index 4730eeb2e9489a..8f85a86a575087 100644 --- a/scripts/tasks/ts.js +++ b/scripts/tasks/ts.js @@ -1,7 +1,7 @@ module.exports = function (options) { const path = require('path'); const execSync = require('../exec-sync'); - const typescriptPath = 'node ' + path.resolve(__dirname, '../node_modules/typescript/lib/tsc'); + const typescriptPath = 'node ' + require.resolve('typescript/lib/tsc'); const libPath = path.resolve(process.cwd(), 'lib'); const srcPath = path.resolve(process.cwd(), 'src'); const extraParams = '--pretty' + (options.isProduction ? ` --inlineSources --sourceRoot ${path.relative(libPath, srcPath)}` : ''); diff --git a/scripts/tasks/tslint.js b/scripts/tasks/tslint.js index 83ee5fce24e01e..6d6d015b1140e8 100644 --- a/scripts/tasks/tslint.js +++ b/scripts/tasks/tslint.js @@ -6,7 +6,7 @@ module.exports = function (options) { const rulesPath = path.dirname(msCustomRulesMain); const projectPath = path.resolve(process.cwd(), 'tsconfig.json'); const sourcePath = path.resolve(process.cwd(), 'src/**/*.ts*'); - const tslintPath = 'node ' + path.resolve(__dirname, '../node_modules/tslint/lib/tslint-cli'); + const tslintPath = 'node ' + require.resolve('tslint/lib/tslint-cli'); execSync(`${tslintPath} --project ${projectPath} -t stylish -r ${rulesPath}`); }; diff --git a/scripts/tasks/webpack-resources.js b/scripts/tasks/webpack-resources.js index c674366c1991e9..f802f9055f73fb 100644 --- a/scripts/tasks/webpack-resources.js +++ b/scripts/tasks/webpack-resources.js @@ -13,6 +13,7 @@ module.exports = { const resolveLoader = { modules: [ + path.resolve(__dirname, '../../node_modules'), path.resolve(__dirname, '../node_modules'), path.resolve(process.cwd(), 'node_modules') ] @@ -148,10 +149,6 @@ module.exports = { plugins: [ new WebpackNotifierPlugin(), - new webpack.WatchIgnorePlugin([ - /\.js$/, - /\.d\.ts$/ - ]), new ForkTsCheckerWebpackPlugin() ] }, From db7af0c9969ec66b9fc2e7a797d91a0abd85e364 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 20:56:02 -0700 Subject: [PATCH 2/7] fixing up copy and sass to support a require.resolve scheme without assumptions of where node_modules is installed --- apps/fabric-website/config/pre-copy.json | 2 +- .../config/pre-copy.json | 14 +++++----- scripts/tasks/copy.js | 24 +++++++++-------- scripts/tasks/sass.js | 27 ++++++++++--------- 4 files changed, 35 insertions(+), 32 deletions(-) diff --git a/apps/fabric-website/config/pre-copy.json b/apps/fabric-website/config/pre-copy.json index baf19c00de4c5b..f9c709ea4c3176 100644 --- a/apps/fabric-website/config/pre-copy.json +++ b/apps/fabric-website/config/pre-copy.json @@ -1,7 +1,7 @@ { "copyTo": { "lib": [ - "src/**/*.json" + "./src/**/*.json" ] } } \ No newline at end of file diff --git a/packages/office-ui-fabric-react/config/pre-copy.json b/packages/office-ui-fabric-react/config/pre-copy.json index 9b8e27e2eba3f0..bf01cca5ff31e0 100644 --- a/packages/office-ui-fabric-react/config/pre-copy.json +++ b/packages/office-ui-fabric-react/config/pre-copy.json @@ -1,17 +1,17 @@ { "copyTo": { "dist": [ - "index.html" + "./index.html" ], "dist/sass": [ - "node_modules/office-ui-fabric-core/dist/sass/**/*", - "src/common/_highContrast.scss", - "src/common/_i18n.scss", - "src/common/_semanticSlots.scss", - "src/common/_themeOverrides.scss" + "office-ui-fabric-core/dist/sass/**/*", + "./src/common/_highContrast.scss", + "./src/common/_i18n.scss", + "./src/common/_semanticSlots.scss", + "./src/common/_themeOverrides.scss" ], "dist/css": [ - "node_modules/office-ui-fabric-core/dist/css/**/*" + "office-ui-fabric-core/dist/css/**/*" ] } } \ No newline at end of file diff --git a/scripts/tasks/copy.js b/scripts/tasks/copy.js index fd3ee6367ef5d1..b613e5db63b3f2 100644 --- a/scripts/tasks/copy.js +++ b/scripts/tasks/copy.js @@ -1,10 +1,5 @@ -// @ts-check const path = require('path'); -/** - * Handles resolve like require.resolve but respects the glob patterns - * @param {string} pattern - */ function expandSourcePath(pattern) { if (!pattern) { return null; @@ -18,14 +13,21 @@ function expandSourcePath(pattern) { // tries to resolve the packages, handling scoped packages const splitPattern = pattern.split('/'); const packageName = pattern[0] == '@' ? `${splitPattern[0]}/${splitPattern[1]}` : splitPattern[0]; - const resolvedPackageJson = require.resolve(`${packageName}/package.json`); - if (!resolvedPackageJson) { - // returns pattern if the packageName didn't contain a package.json (not really a package) - return pattern; - } + try { + const resolvedPackageJson = require.resolve(`${packageName}/package.json`, { + paths: [process.cwd()] + }); - return pattern.replace(packageName, path.dirname(resolvedPackageJson)); + if (!resolvedPackageJson) { + // returns pattern if the packageName didn't contain a package.json (not really a package) + return pattern; + } + + return pattern.replace(packageName, path.dirname(resolvedPackageJson)); + } catch (e) { + console.error(e); + } } module.exports = function (options) { diff --git a/scripts/tasks/sass.js b/scripts/tasks/sass.js index 27d42340933c53..c5b21a9d8e3051 100644 --- a/scripts/tasks/sass.js +++ b/scripts/tasks/sass.js @@ -86,23 +86,24 @@ module.exports = function (options) { return source.join('\n'); } - /** - * @param {string} url - * @param {string} prev - * @param {Function} done - */ + function requireResolvePackageUrl(packageUrl) { + try { + return require.resolve(packageUrl, { + paths: [process.cwd()] + }); + } catch (e) { + // try again with a private reference + return require.resolve(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`), { + paths: [process.cwd()] + }); + } + } + function patchSassUrl(url, prev, done) { let newUrl = url; if (url[0] === '~') { - let packageUrl = url.substr(1) + (url.endsWith('.scss') ? '' : '.scss'); - - try { - newUrl = require.resolve(packageUrl); - } catch (e) { - // try again with a private reference - newUrl = require.resolve(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`)); - } + newUrl = requireResolve(url.substr(1) + (url.endsWith('.scss') ? '' : '.scss')); } else if (url === 'stdin') { newUrl = ''; From 01e93b366d5ddb9174b9abb841fa9be5400edaf2 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 21:01:57 -0700 Subject: [PATCH 3/7] restore modules back to its old glory --- scripts/tasks/webpack-resources.js | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/tasks/webpack-resources.js b/scripts/tasks/webpack-resources.js index f802f9055f73fb..fc8cefb953015c 100644 --- a/scripts/tasks/webpack-resources.js +++ b/scripts/tasks/webpack-resources.js @@ -13,7 +13,6 @@ module.exports = { const resolveLoader = { modules: [ - path.resolve(__dirname, '../../node_modules'), path.resolve(__dirname, '../node_modules'), path.resolve(process.cwd(), 'node_modules') ] From 4a51ee403081d0b823059593a7babed96853d3a4 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 21:22:15 -0700 Subject: [PATCH 4/7] refactor require.resolve to another file --- scripts/require-resolve-cwd.js | 3 +++ scripts/tasks/copy.js | 6 +++--- scripts/tasks/jest-resources.js | 5 +++-- scripts/tasks/jest.js | 3 ++- scripts/tasks/sass.js | 11 ++++------- scripts/tasks/ts.js | 3 ++- scripts/tasks/tslint.js | 5 +++-- 7 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 scripts/require-resolve-cwd.js diff --git a/scripts/require-resolve-cwd.js b/scripts/require-resolve-cwd.js new file mode 100644 index 00000000000000..8da574d467143c --- /dev/null +++ b/scripts/require-resolve-cwd.js @@ -0,0 +1,3 @@ +module.exports = function (request) { + return require.resolve(request, { paths: process.cwd() }); +} \ No newline at end of file diff --git a/scripts/tasks/copy.js b/scripts/tasks/copy.js index b613e5db63b3f2..13b5eca99f4217 100644 --- a/scripts/tasks/copy.js +++ b/scripts/tasks/copy.js @@ -1,6 +1,8 @@ const path = require('path'); function expandSourcePath(pattern) { + const requireResolveCwd = require('../require-resolve-cwd'); + if (!pattern) { return null; } @@ -15,9 +17,7 @@ function expandSourcePath(pattern) { const packageName = pattern[0] == '@' ? `${splitPattern[0]}/${splitPattern[1]}` : splitPattern[0]; try { - const resolvedPackageJson = require.resolve(`${packageName}/package.json`, { - paths: [process.cwd()] - }); + const resolvedPackageJson = requireResolveCwd(`${packageName}/package.json`); if (!resolvedPackageJson) { // returns pattern if the packageName didn't contain a package.json (not really a package) diff --git a/scripts/tasks/jest-resources.js b/scripts/tasks/jest-resources.js index 30a1230ebd70cc..bd763435a8a035 100644 --- a/scripts/tasks/jest-resources.js +++ b/scripts/tasks/jest-resources.js @@ -1,5 +1,6 @@ const path = require('path'); const merge = require('./merge'); +const requireResolveCwd = require('../require-resolve-cwd'); const styleMockPath = module.exports = { @@ -12,13 +13,13 @@ const styleMockPath = createConfig: (customConfig) => merge( { moduleNameMapper: { - 'ts-jest': require.resolve('ts-jest'), + 'ts-jest': requireResolveCwd('ts-jest'), '\\.(scss)$': path.resolve(__dirname, 'jest-style-mock.js'), 'KeyCodes': path.resolve(__dirname, 'jest-mock.js') }, 'transform': { - '.(ts|tsx)': require.resolve('ts-jest/preprocessor.js') + '.(ts|tsx)': requireResolveCwd('ts-jest/preprocessor.js') }, 'reporters': [ diff --git a/scripts/tasks/jest.js b/scripts/tasks/jest.js index 60b3be0771a4c0..6da530bae591c3 100644 --- a/scripts/tasks/jest.js +++ b/scripts/tasks/jest.js @@ -3,11 +3,12 @@ module.exports = function (options) { const fs = require('fs'); const execSync = require('../exec-sync'); const findConfig = require('../find-config'); + const requireResolveCwd = require('../require-resolve-cwd'); const jestConfigPath = findConfig('jest.config.js'); if (fs.existsSync(jestConfigPath)) { - const jestPath = require.resolve('jest/bin/jest'); + const jestPath = requireResolveCwd('jest/bin/jest'); const customArgs = options && options.argv ? options.argv.slice(3).join(' ') : ''; const args = [ diff --git a/scripts/tasks/sass.js b/scripts/tasks/sass.js index c5b21a9d8e3051..b6bfbe88706508 100644 --- a/scripts/tasks/sass.js +++ b/scripts/tasks/sass.js @@ -1,6 +1,7 @@ module.exports = function (options) { const glob = require('glob'); const path = require('path'); + const requireResolveCwd = require('../require-resolve-cwd'); const _fileNameToClassMap = {}; @@ -88,14 +89,10 @@ module.exports = function (options) { function requireResolvePackageUrl(packageUrl) { try { - return require.resolve(packageUrl, { - paths: [process.cwd()] - }); + return requireResolveCwd(packageUrl); } catch (e) { // try again with a private reference - return require.resolve(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`), { - paths: [process.cwd()] - }); + return requireResolveCwd(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`)); } } @@ -103,7 +100,7 @@ module.exports = function (options) { let newUrl = url; if (url[0] === '~') { - newUrl = requireResolve(url.substr(1) + (url.endsWith('.scss') ? '' : '.scss')); + newUrl = requireResolvePackageUrl(url.substr(1) + (url.endsWith('.scss') ? '' : '.scss')); } else if (url === 'stdin') { newUrl = ''; diff --git a/scripts/tasks/ts.js b/scripts/tasks/ts.js index 8f85a86a575087..89279b1fb5e4c3 100644 --- a/scripts/tasks/ts.js +++ b/scripts/tasks/ts.js @@ -1,7 +1,8 @@ module.exports = function (options) { + const requireResolveCwd = require('../require-resolve-cwd'); const path = require('path'); const execSync = require('../exec-sync'); - const typescriptPath = 'node ' + require.resolve('typescript/lib/tsc'); + const typescriptPath = 'node ' + requireResolveCwd('typescript/lib/tsc'); const libPath = path.resolve(process.cwd(), 'lib'); const srcPath = path.resolve(process.cwd(), 'src'); const extraParams = '--pretty' + (options.isProduction ? ` --inlineSources --sourceRoot ${path.relative(libPath, srcPath)}` : ''); diff --git a/scripts/tasks/tslint.js b/scripts/tasks/tslint.js index 6d6d015b1140e8..c1cc9e14a7bf58 100644 --- a/scripts/tasks/tslint.js +++ b/scripts/tasks/tslint.js @@ -1,12 +1,13 @@ module.exports = function (options) { + const requireResolveCwd = require('../require-resolve-cwd'); const execSync = require('../exec-sync'); const path = require('path'); const fs = require('fs'); - const msCustomRulesMain = require.resolve('tslint-microsoft-contrib'); + const msCustomRulesMain = requireResolveCwd('tslint-microsoft-contrib'); const rulesPath = path.dirname(msCustomRulesMain); const projectPath = path.resolve(process.cwd(), 'tsconfig.json'); const sourcePath = path.resolve(process.cwd(), 'src/**/*.ts*'); - const tslintPath = 'node ' + require.resolve('tslint/lib/tslint-cli'); + const tslintPath = 'node ' + requireResolveCwd('tslint/lib/tslint-cli'); execSync(`${tslintPath} --project ${projectPath} -t stylish -r ${rulesPath}`); }; From 76f5d8d4832c533020576d560474f7c0092cbeb1 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 22:36:18 -0700 Subject: [PATCH 5/7] correctly apply the require.resolve for scripts node_modules stuff --- scripts/require-resolve-cwd.js | 2 +- scripts/tasks/jest-resources.js | 5 ++--- scripts/tasks/sass.js | 8 +++++--- scripts/tasks/ts.js | 3 +-- scripts/tasks/tslint.js | 5 ++--- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/scripts/require-resolve-cwd.js b/scripts/require-resolve-cwd.js index 8da574d467143c..14ec330a3393b4 100644 --- a/scripts/require-resolve-cwd.js +++ b/scripts/require-resolve-cwd.js @@ -1,3 +1,3 @@ module.exports = function (request) { - return require.resolve(request, { paths: process.cwd() }); + return require.resolve(request, { paths: [process.cwd()] }); } \ No newline at end of file diff --git a/scripts/tasks/jest-resources.js b/scripts/tasks/jest-resources.js index bd763435a8a035..30a1230ebd70cc 100644 --- a/scripts/tasks/jest-resources.js +++ b/scripts/tasks/jest-resources.js @@ -1,6 +1,5 @@ const path = require('path'); const merge = require('./merge'); -const requireResolveCwd = require('../require-resolve-cwd'); const styleMockPath = module.exports = { @@ -13,13 +12,13 @@ const styleMockPath = createConfig: (customConfig) => merge( { moduleNameMapper: { - 'ts-jest': requireResolveCwd('ts-jest'), + 'ts-jest': require.resolve('ts-jest'), '\\.(scss)$': path.resolve(__dirname, 'jest-style-mock.js'), 'KeyCodes': path.resolve(__dirname, 'jest-mock.js') }, 'transform': { - '.(ts|tsx)': requireResolveCwd('ts-jest/preprocessor.js') + '.(ts|tsx)': require.resolve('ts-jest/preprocessor.js') }, 'reporters': [ diff --git a/scripts/tasks/sass.js b/scripts/tasks/sass.js index b6bfbe88706508..234800e7556ca4 100644 --- a/scripts/tasks/sass.js +++ b/scripts/tasks/sass.js @@ -88,11 +88,13 @@ module.exports = function (options) { } function requireResolvePackageUrl(packageUrl) { + const fullName = packageUrl + (packageUrl.endsWith('.scss') ? '' : '.scss'); + try { - return requireResolveCwd(packageUrl); + return requireResolveCwd(fullName); } catch (e) { // try again with a private reference - return requireResolveCwd(path.join(path.dirname(packageUrl), `_${path.basename(packageUrl)}`)); + return requireResolveCwd(path.join(path.dirname(fullName), `_${path.basename(fullName)}`)); } } @@ -100,7 +102,7 @@ module.exports = function (options) { let newUrl = url; if (url[0] === '~') { - newUrl = requireResolvePackageUrl(url.substr(1) + (url.endsWith('.scss') ? '' : '.scss')); + newUrl = requireResolvePackageUrl(url.substr(1)); } else if (url === 'stdin') { newUrl = ''; diff --git a/scripts/tasks/ts.js b/scripts/tasks/ts.js index 89279b1fb5e4c3..8f85a86a575087 100644 --- a/scripts/tasks/ts.js +++ b/scripts/tasks/ts.js @@ -1,8 +1,7 @@ module.exports = function (options) { - const requireResolveCwd = require('../require-resolve-cwd'); const path = require('path'); const execSync = require('../exec-sync'); - const typescriptPath = 'node ' + requireResolveCwd('typescript/lib/tsc'); + const typescriptPath = 'node ' + require.resolve('typescript/lib/tsc'); const libPath = path.resolve(process.cwd(), 'lib'); const srcPath = path.resolve(process.cwd(), 'src'); const extraParams = '--pretty' + (options.isProduction ? ` --inlineSources --sourceRoot ${path.relative(libPath, srcPath)}` : ''); diff --git a/scripts/tasks/tslint.js b/scripts/tasks/tslint.js index c1cc9e14a7bf58..6d6d015b1140e8 100644 --- a/scripts/tasks/tslint.js +++ b/scripts/tasks/tslint.js @@ -1,13 +1,12 @@ module.exports = function (options) { - const requireResolveCwd = require('../require-resolve-cwd'); const execSync = require('../exec-sync'); const path = require('path'); const fs = require('fs'); - const msCustomRulesMain = requireResolveCwd('tslint-microsoft-contrib'); + const msCustomRulesMain = require.resolve('tslint-microsoft-contrib'); const rulesPath = path.dirname(msCustomRulesMain); const projectPath = path.resolve(process.cwd(), 'tsconfig.json'); const sourcePath = path.resolve(process.cwd(), 'src/**/*.ts*'); - const tslintPath = 'node ' + requireResolveCwd('tslint/lib/tslint-cli'); + const tslintPath = 'node ' + require.resolve('tslint/lib/tslint-cli'); execSync(`${tslintPath} --project ${projectPath} -t stylish -r ${rulesPath}`); }; From 02632e898381f84bed5f282498d3e2714ec2812f Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 22:44:46 -0700 Subject: [PATCH 6/7] fix jest --- scripts/tasks/jest.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/tasks/jest.js b/scripts/tasks/jest.js index 6da530bae591c3..60b3be0771a4c0 100644 --- a/scripts/tasks/jest.js +++ b/scripts/tasks/jest.js @@ -3,12 +3,11 @@ module.exports = function (options) { const fs = require('fs'); const execSync = require('../exec-sync'); const findConfig = require('../find-config'); - const requireResolveCwd = require('../require-resolve-cwd'); const jestConfigPath = findConfig('jest.config.js'); if (fs.existsSync(jestConfigPath)) { - const jestPath = requireResolveCwd('jest/bin/jest'); + const jestPath = require.resolve('jest/bin/jest'); const customArgs = options && options.argv ? options.argv.slice(3).join(' ') : ''; const args = [ From 9636077af92593026c9b938d072c322f75e06647 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Fri, 25 May 2018 22:51:22 -0700 Subject: [PATCH 7/7] adding change files --- .../fabric-website/fixbuild_2018-05-26-05-50.json | 11 +++++++++++ .../fixbuild_2018-05-26-05-50.json | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 common/changes/@uifabric/fabric-website/fixbuild_2018-05-26-05-50.json create mode 100644 common/changes/office-ui-fabric-react/fixbuild_2018-05-26-05-50.json diff --git a/common/changes/@uifabric/fabric-website/fixbuild_2018-05-26-05-50.json b/common/changes/@uifabric/fabric-website/fixbuild_2018-05-26-05-50.json new file mode 100644 index 00000000000000..73b0d25bc15bae --- /dev/null +++ b/common/changes/@uifabric/fabric-website/fixbuild_2018-05-26-05-50.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@uifabric/fabric-website", + "comment": "Use require.resolve logic in builds & watch .js files from node_modules", + "type": "patch" + } + ], + "packageName": "@uifabric/fabric-website", + "email": "kchau@microsoft.com" +} \ No newline at end of file diff --git a/common/changes/office-ui-fabric-react/fixbuild_2018-05-26-05-50.json b/common/changes/office-ui-fabric-react/fixbuild_2018-05-26-05-50.json new file mode 100644 index 00000000000000..f8d9a29fff1bb1 --- /dev/null +++ b/common/changes/office-ui-fabric-react/fixbuild_2018-05-26-05-50.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "office-ui-fabric-react", + "comment": "Use require.resolve logic in builds & watch .js files from node_modules", + "type": "patch" + } + ], + "packageName": "office-ui-fabric-react", + "email": "kchau@microsoft.com" +} \ No newline at end of file